我正在为Web应用程序设计REST API。
我在设计API时的原则是:
让我们说在应用程序中我们有用户,产品,位置,产品新闻。用例用户来自某个位置的产品新闻。如果位置为空,则用户从每个位置跟踪有关产品的新闻 产品和位置清单是众所周知的。
我最终得到以下网址:
/product/follow?product=<product_name>[&location=<location name>]
product
和location
名称位于查询部分,因为将来可以更灵活地扩展名称。
就个人而言,我更接近 PUT ,因为通过API的用例原则(我认为是正确的)无效规则接缝是最相应的接缝。
答案 0 :(得分:1)
首先确定资源。我会说那个
/products/<product_name>/followers
是product_name
之后的所有用户的列表。您可以使用查询参数进行过滤:
/products/<product_name>/followers?location=<location_name>
是来自product_name
的{{1}}后的所有用户的列表。
针对此类资源的location_name
请求会返回用户列表的表示形式(JSON,XML,...)。
GET
或POST
针对此类资源的PUT
请求添加新用户。此类POST
请求的请求正文包含详细信息。
POST
服务器将回复:
POST /products/<product_name>/followers
Content-Type: application/json
{
"user": "some user",
"location: "some location"
}
如果客户端知道URI,则可以使用201 Created
Location: /products/<product_name>/followers/some%20user
:
PUT
服务器将再次响应:
PUT /products/<product_name>/followers/some%20user
Content-Type: application/json
{
"location: "some location"
}
<强>摘要强>
如果客户端能够准确知道URI,则可以使用201 Created
Location: /products/<product_name>/followers/some%20user
。该URL只能由服务器知道,使用PUT
。