requests? 当处理不同类型的GET请求时,我应该如何格式化我的REST API?
如何在处理不同类型的GET时格式化我的REST API?
REST API是一种使用不同的HTTP方法来执行不同操作的架构风格。这样可以使路径保持简洁和清晰。
例如:
GET /orders/{someId}
PUT /orders/{someId}
POST /orders/{someId}
DELETE /orders/{someId}
其中,GET用于检索资源,PUT用于更新资源,POST用于创建资源,DELETE用于删除资源。这遵循了基本的CRUD(创建、读取、更新、删除)操作。如果需要添加其他过滤器/参数,可以使用查询参数。
将HTTP方法与CRUD进行等同会导致在REST API中无法进行除CRUD之外的其他操作。HTTP方法比这灵活得多。
我并不是说要限制使用这4种HTTP方法。然而,在REST中,这通常是它们的用法。我想给出一个以此为设计思路的例子。当然,这些方法可以根据需要(RESTful或非RESTful)用于许多不同类型的请求,以提高灵活性。
REST映射HTTP方法到CRUD操作可能是对REST概念产生困惑的主要原因之一。我建议阅读这个答案以澄清这一点:stackoverflow.com/questions/19843480/…
在处理不同类型的GET请求时,如何格式化我的REST API?
这个问题的出现原因是有人在讨论中提到了一个GET请求的示例:`GET /orders/{someId}/action`。然后有人提出了疑问,认为GET请求不应该修改资源,而是用于加载资源,因此对于这个示例中的URL是否用于修改资源表示存疑。
对于这个问题的解决方法有两种观点。一种观点认为,GET请求不应该包含修改资源的操作,因此`/action`这样的动作应该被避免。另一种观点认为,虽然REST是基于资源而不是动作的,但是`/edit`和`/review`可以被视为不同的资源。
无论采取哪种观点,都可以使用不同的URL格式来表示不同类型的GET请求。例如,使用路径段表示不同类型的GET请求`GET /orders/{someId}/edit`和`GET /orders/{someId}/review`,或者使用查询参数`GET /orders/{someId}?type=edit`和`GET /orders/{someId}?type=review`。
以下是讨论中的一些观点和意见:
- GET请求不应该包含修改资源的操作,应该避免使用`/action`这样的动作表示。相反,可以使用不同的URL来表示不同的资源类型。
- `/edit`和`/review`可以被视为不同的资源类型,可以使用路径段或查询参数来表示。
- REST是基于资源而不是动作的,因此有人认为应该避免在URL中包含动作。
总之,对于处理不同类型的GET请求,可以采用不同的URL格式来表示不同的资源类型。无论是使用路径段还是查询参数,都可以根据自己的需求来选择适合的URL格式。重要的是保持一致性和清晰性,以便于其他开发者理解和使用API。