restful api的设计理念和最佳实践

restful api的设计理念和最佳实践,rest,design-principles,Rest,Design Principles,我有幸重新设计我们的主要项目公共api。 最初的目标是创建一个restful api,[在添加了很多额外的特性之后]最终导致rest/json rpc不匹配 因此,是时候重新思考和重新设计了。然而,我需要一些关于如何解决一些更复杂的操作的想法 基本操作已经实施,工作正常 每个资源都由分层段塞访问: GET /project/fubar/fishes 还添加了区域设置和输出格式: GET /project/fubar/fishes.en-us.json 好的,现在进入棘手的部分: 项目中的基本

我有幸重新设计我们的主要项目公共api。 最初的目标是创建一个restful api,[在添加了很多额外的特性之后]最终导致rest/json rpc不匹配

因此,是时候重新思考和重新设计了。然而,我需要一些关于如何解决一些更复杂的操作的想法

基本操作已经实施,工作正常

每个资源都由分层段塞访问:

GET /project/fubar/fishes
还添加了区域设置和输出格式:

GET /project/fubar/fishes.en-us.json
好的,现在进入棘手的部分:

项目中的基本资源与具有标题和子节点的文件夹相似。“文件夹”可以有子文件夹和项目

向文件夹中添加新文件夹或项目的最佳做法是什么

是否需要放置/修补程序来更新有关文件夹的信息,而不是将资源链接到该文件夹? 创建新文件夹需要POST

POST /project/fubar/fishes
再补充一点,区分文件夹到文件夹和项目到文件夹链接操作的最佳实践是什么。请记住,链接可以也将有另一个名称,然后是目标。类似于POSIX系统中的符号链接

我的想法是(对现有资源):

反过来又如何;取消链接

DELETE /project/fubar/fishes/dogs
但这是一个好的设计,还是我会在以后再考虑它?

使用内容协商 不建议使用此选项:

GET /project/fubar/fishes.en-us.json
在REST术语中,这是一种不同于现有资源的资源

GET /project/fubar/fishes
但就我理解你的问题而言,两者都是相同的资源,只是在不同的表述中

要获取特定表示形式中的资源,请使用

物品在哪里? 我在你的URL中没有看到任何项目,只有你所谓的“文件夹”。在REST术语中,这些被称为集合资源。通过
POST
ing将项目添加到集合资源中。您可以通过
delete
ing来删除项目。您可以通过
POST
将更改的部分添加到项目中来更改项目的部分。您可以通过
PUT
ing更新整个项目

我建议确定收集资源和系统中的项目

GET /project/fubar/fishes
GET /project/fubar/fishers
Accept: application/json
Accept-Language: en-us