REST URI - 最佳方法
REST URI - Best approach
get /cars -> Get all cars
get /cars/1 -> Get car with id 1
post /cars -> Create car
post /cars/1/bookmark -> The authenticated user bookmarks the car with id 1
为了让经过身份验证的用户获得他收藏的汽车,我们可以:
get /cars/bookmarked
或
get /users/me/cars/bookmarked
首选哪个?
没有"preferred"标准,这个问题与Rest无关。 Rest 与如何构建 URI 无关。 Rest 是一种架构风格,其核心是超媒体作为应用程序状态的引擎。在真正的 Rest 中,客户端不知道除了单个入口点 URI 之外的任何 URI。
话虽如此,在我发现我上面刚刚解释的内容之后,并且在想知道我的 API 的完美 URI 结构是什么之后,我也意识到最好不要假设那里是 API 的 "preferred" URI 结构。当然,某些结构有利有弊,但总的来说,你会从不同的人那里得到不同的反应。几乎没有人同意基于 HTTP 的 API 的 "preferred" URI 结构。我说只要选择一个你喜欢的 URI 结构然后继续。
获取/汽车
常被称为"collection"。这应该 return 消费者可以看到的所有汽车。通常包含查询参数以操纵响应,例如
GET /cars?type=sports&color=red
当你有一个 "collection" 时,它是一个自然的扩展,也提供一个特定的 "document"(或集合的成员)
GET /cars/{id}
这通常不会有查询参数来操纵响应,因为请求是针对特定且已知的 document/resource。
为了创建新资源,您可以使用 post
POST/汽车
您应该会收到一个 http 代码 201
为了更新现有资源,通常您会使用 PUT,但有一种趋势是使用 POST 进行更新和创建
http://www.thoughtworks.com/radar/techniques
要尝试解决您的问题,我认为您要么需要将书签视为自己的资源,并允许用户 POST/PUT 使用 links/references 访问书签资源,要么包含一个书签汽车资源的方面,并允许用户 POST/PUT 使用它。
get /cars -> Get all cars
get /cars/1 -> Get car with id 1
post /cars -> Create car
post /cars/1/bookmark -> The authenticated user bookmarks the car with id 1
为了让经过身份验证的用户获得他收藏的汽车,我们可以:
get /cars/bookmarked
或
get /users/me/cars/bookmarked
首选哪个?
没有"preferred"标准,这个问题与Rest无关。 Rest 与如何构建 URI 无关。 Rest 是一种架构风格,其核心是超媒体作为应用程序状态的引擎。在真正的 Rest 中,客户端不知道除了单个入口点 URI 之外的任何 URI。
话虽如此,在我发现我上面刚刚解释的内容之后,并且在想知道我的 API 的完美 URI 结构是什么之后,我也意识到最好不要假设那里是 API 的 "preferred" URI 结构。当然,某些结构有利有弊,但总的来说,你会从不同的人那里得到不同的反应。几乎没有人同意基于 HTTP 的 API 的 "preferred" URI 结构。我说只要选择一个你喜欢的 URI 结构然后继续。
获取/汽车
常被称为"collection"。这应该 return 消费者可以看到的所有汽车。通常包含查询参数以操纵响应,例如 GET /cars?type=sports&color=red
当你有一个 "collection" 时,它是一个自然的扩展,也提供一个特定的 "document"(或集合的成员)
GET /cars/{id}
这通常不会有查询参数来操纵响应,因为请求是针对特定且已知的 document/resource。
为了创建新资源,您可以使用 post
POST/汽车
您应该会收到一个 http 代码 201
为了更新现有资源,通常您会使用 PUT,但有一种趋势是使用 POST 进行更新和创建 http://www.thoughtworks.com/radar/techniques
要尝试解决您的问题,我认为您要么需要将书签视为自己的资源,并允许用户 POST/PUT 使用 links/references 访问书签资源,要么包含一个书签汽车资源的方面,并允许用户 POST/PUT 使用它。