我问了一个类似的问题,但也许这太复杂了 - https://stackoverflow.com/questions/26900550/rest-api-design-for-performing-different-actions-on-an-underlying-object?noredirect=1#comment42354797_26900550
我的系统的业务规则如下:
我正在尝试使用名词和子资源作为最佳实践,并且不一定使其余的api与我的数据库模型匹配,但它是新的和可怕的。
jobs (get, post)
jobs/{id} (get, put)
jobs/{id}/status (post, delete)
jobs/{id}/quote (post, put, delete)
jobs/{id}/quote/decision (post, delete)
最后一个端点是报价状态将变为赢/输等的地方。删除功能是为了防止作业被意外标记为赢/输,需要返回发送。
任何人都可以提供建议或见解,了解这是建立api的好方法还是我过度使用它?
答案 0 :(得分:1)
PUT始终需要资源的整体表示,如果要进行部分更新,则需要PATCH。
如果您已经知道资源的URI,例如jobs/{id}/quote
,那么使用PUT或PATCH来创建而不是POST。 POST更适用于在集合中创建项目资源,而不是用于创建子资源。
请注意您正在定义链接,例如GET jobs
,POST jobs
等等......您为GET提供的回复应包含这些链接,以便客户端可以使用它们。您需要向这些链接添加元数据,例如link relations或来自related vocab的RDF属性等等......因此客户端将知道链接的作用。 URI中的名词只是用于检查我们是否真的在讨论资源而不是操作,客户端与URI结构无关。
我建议您先阅读REST constraints。之后,您应该阅读HTTP标准的基础知识。您应该找到适当的超媒体格式,例如HAL + JSON或JSONLD + Hydra如果您更喜欢RDF。之后你可以工作。