7

我正在创建一个由 API 提供支持的抽奖应用程序。层次结构相当简单。

  1. 客户
  2. 用户
  3. 抽奖
  4. 提交内容

客户可以拥有本质上是任何抽奖活动的管理员的用户。客户还可以进行多次抽奖。一个抽奖可以有多个提交。好吧,不复杂。

我感到困惑的是对 URL 结构的正确方法是什么。我已经阅读了互联网上的文档和最佳实践博客,但我仍然感到困惑。以下是我们目前的路线:

客户

POST /clients
GET /clients
GET /clients/:client_id
PUT /clients:client_id

用户

POST /users
GET /users
GET /users/:user_id
PUT /users/:user_id
DELETE /users/:user_id

抽奖

POST /sweepstakes
GET /sweepstakes
GET /sweepstakes/:sweepstakes_id
PUT /sweepstakes/:sweepstakes_id
DELETE /sweepstakes/:sweepstakes_id

提交

POST /submissions
GET /submissions
GET /submissions/:submission_id
PUT /submissions/:submission_id
DELETE /submissions/:submission_id

如您所见,我对每个资源都遵循了一个简单的 2 个 URL——我认为这是最佳实践。然后,您可以通过任何 GET 请求的查询参数(例如/submissions?sweepstakes_id={sweepstakes_id}/sweepstakes?client_id={client_id}等)深入了解关联。

这对我来说当然是有道理的,但是我和我的同事争论不休,因为他正在使用 Backbone 来构建主要的前端应用程序。Backbone 声明他们立即支持 RESTful API 使用,但我的同事告诉我,Backbone 更喜欢表示该层次结构的 URL 结构。我当然认为这会导致 URL 结构混乱、冗长且整体令人困惑。理想情况下,我的同事希望看到以下 URL 结构:

GET /clients
GET /clients/users
GET /clients/sweepstakes
GET /clients/sweepstakes/submissions

注意:上面的路由也会有额外的路由通过 URL 中的额外资源 id 来补充单个资源(例如/clients/users/:user_id/clients/sweepstakes/:sweepstakes_id/submissions等)。

我知道这是一个有点敏感的话题,但我很想听听对此的一些反馈。我投票给每个资源一个 2 个 URL,如果需要进行任何关联,可以通过使用 GET 或 POST 参数来完成。但我可能完全错了。

4

2 回答 2

6

你说得对,这是一个有争议的话题。话虽如此,我发现Apigee的帮派在尝试充实api 标准/定义时非常有帮助。他们并没有说一种方法是正确的,他们更倾向于根据他们的行业经验提出有根据的建议。

他们提供了一些很棒的资源和一些内容,可以帮助你达到一个可以与你角落里的其他人一起捍卫你的观点的位置。

看看这个网络研讨会......它是相当基本的东西,但对于 api 设计的复习来说总是很棒的。

注意:我与 Apigee 没有任何关系,我只是认为他们已经做了一些伟大的工作,试图为 api 设计定义一个标准。

〜祝你好运,我希望这会有所帮助

于 2013-02-11T13:08:12.100 回答
1

我在REST 的官方定义中找不到任何建议优先使用分层 URI 的内容,但我可能遗漏了一些东西。我对 Backbone 一无所知,但如果它需要这种结构,我想你必须这样做,但似乎没有任何理由让它在此之外更好。然而,通常最好是每个资源都有一个唯一的 URI,而分层的 URI 似乎有多个。我知道你不能代表你的同事说话,但他有没有提供任何切实的理由说明他的方案会有更好的功能?

于 2013-01-14T16:54:10.927 回答