0

我有幸重新设计我们的主要项目公共 api。最初的目标是制作一个宁静的 api,[在添加了许多额外的功能之后] 最终成为了 rest/json-rpc 不匹配。

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

基本的CURD操作已经实现并且工作正常。

每个资源都由分层 slug 访问:

GET /project/fubar/fishes

还添加了语言环境和输出格式:

GET /project/fubar/fishes.en-us.json

好的,现在到棘手的部分:

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

将新文件夹或项目添加到文件夹的最佳做法是什么?

需要 PUT/PATCH 来更新有关文件夹的信息,而不是将资源链接到它?需要 POST 来创建新文件夹。

POST /project/fubar/fishes

再补充一点,区分文件夹到文件夹和项目到文件夹链接操作的最佳做​​法是什么。请记住,链接可以并且将有另一个名称,然后是目标。类似于 POSIX 系统中的符号链接。

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

POST /project/fubar/fishes
{
   link: /project/fubar/dogs
   title: DOGS!
   type: folder
}

反过来呢?取消链接?

DELETE /project/fubar/fishes/dogs

但这是一个好的设计还是稍后会回到我身边?

4

1 回答 1

2

使用内容协商

不建议使用这个:

GET /project/fubar/fishes.en-us.json

在REST术语中,这是

GET /project/fubar/fishes

但据我了解您的问题,两者都是相同的资源,只是在不同的表示中。

要获取特定表示中的资源,请使用内容协商

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

物品在哪里?

我在您的网址中看不到任何项目,只有您所谓的“文件夹”。在 REST 术语中,这些称为集合资源。POST您可以通过ing 将项目添加到集合资源中。你通过 ing 删除一个项目DELETE。您可以POST通过将更改的部分添加到项目中来更改项目的部分。PUT您可以通过ing更新一个完整的项目。

我建议识别系统中的集合资源和项目。

于 2012-11-14T08:08:45.283 回答