RESTful API for POST 当其他 HTTP 动词的路径有多个参数时?

RESTful API for POST when other HTTP Verbs' paths have multiple Params?

你好,一月快乐!

回顾我最近创建的一个非常简单的 RESTful API,我想知道我是否为其 POST 做了 RESTful API 签名。

这个RESTfulAPI查询一个非常简单的MongoDB集合Apps,它的列是:

索引:

数据结构:

HTTP 动词 GET DELETEPATCH 处理集合 Apps 中的项目的路径是:

我的困惑如下:我想 POST 一个将与 siteId + accountId 相关联的新应用程序。

我想知道我如何定义此 POST 路径是否有意义,因为新应用程序可能是第一次 siteIdaccountId 添加到此集合中。

这是我为 HTTP 动词实现的 POST:

POST /api/v1/sites/:siteId/accounts/:accountId/apps

params: {
  siteId: string,
  accountId: string,
},
body: {
  provider: '[** Provider **]',
  description: '[** Description **]',

  siteId: '[** Site ID **]',
  accountId: '[** Account ID **]'
},
response: new `appId`

或者应该是(我开始倾向于):

POST /api/v1/apps

body: {
  provider: '[** Provider **]',
  description: '[** Description **]',

  siteId: '[** Site ID **]',
  accountId: '[** Account ID **]'
},
response: new `appId`

真心欢迎推荐!

首先,在 url 和正文中同时包含 siteId 和 accountId 会有点奇怪。 url 表明您正在为特定站点创建应用程序,然后该站点是消息正文中的一个变量,这意味着它可以是任何站点。这只会导致混乱。

您是否希望有人能够为任何 site/account 组合注册新应用?或者有人会从选择站点到为该站点注册新应用程序。在第一种情况下,我会把它全部放在正文中,在第二种情况下,我会把网站放在 url 中。

考虑 RESTfulness;当您在将应用程序注册到特定站点之前使用 api 查找站点或特定站点时,响应中的 'site' 对象将引用为该站点注册应用程序的位置.此 link 可能包含站点 ID。但是,如果它只是一个 url,您可以在其中注册任何站点,则 siteId 将不会出现在 url 中,甚至不会成为该特定响应的一部分。

我想我会考虑 url 无论如何,这似乎是它总是相同的,只是你必须作为变量传递的东西。