当其他HTTP动词的路径具有多个Params时,用于POST的RESTful API?

时间:2019-01-15 06:17:49

标签: rest restful-url

你好,一月快乐!

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

此RESTful API查询一个非常简单的MongoDB集合Apps,其列为:

  • _id,(appId
  • siteId(必填)
  • accountId(必填)
  • provider(必填)
  • description

索引:

  • providersiteIdaccountIdunique

数据结构:

  • 每个站点(siteId)都有多个帐户(accountId)。
  • 每个帐户(accountId)都有多个应用(appId)。

处理集合GET中的HTTP动词DELETE PATCHApps的路径为:

  • GET /api/v1/sites/:siteId/accounts/:accountId/apps
  • DELETE /api/v1/sites/:siteId/accounts/:accountId/apps
  • PATCH /api/v1/sites/:siteId/accounts/:accountId/apps

我的困惑如下:我想POSTsiteId + accountId关联的新应用程序。

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

这是我为HTTP Verb 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`

我们真的很欢迎建议!

1 个答案:

答案 0 :(得分:2)

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

您是否希望某人能够为任何网站/帐户组合注册一个新的应用程序?还是有人会从选择站点转到为该站点注册新应用程序。在第一种情况下,我会将其全部放在正文中,在第二种情况下,将URL中的站点放到正文中。

考虑RESTfulness;当您在将应用程序注册到特定站点之前使用api查找站点或特定站点时,响应中的“站点”对象将引用一个人在该站点上注册应用程序的位置。该链接可能包含siteId。但是,如果只是可以在其中注册任何站点的URL,则siteId在URL中将没有位置,甚至不属于该特定响应。

我想无论如何我都会考虑url,这似乎总是一样的,只是您必须将其作为变量传递。