你好,一月快乐!
回顾我最近创建的一个非常简单的RESTful API,我想知道我是否对其POST做过RESTful API签名。
此RESTful API查询一个非常简单的MongoDB集合Apps
,其列为:
_id
,(appId
)siteId
(必填)accountId
(必填)provider
(必填)description
索引:
provider
,siteId
,accountId
:unique
数据结构:
siteId
)都有多个帐户(accountId
)。accountId
)都有多个应用(appId
)。处理集合GET
中的HTTP动词DELETE
PATCH
和Apps
的路径为:
GET /api/v1/sites/:siteId/accounts/:accountId/apps
DELETE /api/v1/sites/:siteId/accounts/:accountId/apps
PATCH /api/v1/sites/:siteId/accounts/:accountId/apps
我的困惑如下:我想POST
与siteId
+ accountId
关联的新应用程序。
我想知道如何定义此POST
路径是否有意义,因为新应用可能是第一次添加到siteId
或accountId
的集合中。
这是我为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`
我们真的很欢迎建议!
答案 0 :(得分:2)
首先,在网址和正文中同时包含siteId和accountId有点奇怪。该URL建议您正在为特定站点创建一个应用程序,然后该站点是消息正文中的变量,这意味着它可以是任何站点。这只会导致混乱。
您是否希望某人能够为任何网站/帐户组合注册一个新的应用程序?还是有人会从选择站点转到为该站点注册新应用程序。在第一种情况下,我会将其全部放在正文中,在第二种情况下,将URL中的站点放到正文中。
考虑RESTfulness;当您在将应用程序注册到特定站点之前使用api查找站点或特定站点时,响应中的“站点”对象将引用一个人在该站点上注册应用程序的位置。该链接可能包含siteId。但是,如果只是可以在其中注册任何站点的URL,则siteId在URL中将没有位置,甚至不属于该特定响应。
我想无论如何我都会考虑url,这似乎总是一样的,只是您必须将其作为变量传递。