【问题标题】:RESTful API for POST when other HTTP Verbs' paths have multiple Params?当其他 HTTP 动词的路径有多个参数时,用于 POST 的 RESTful API?
【发布时间】:2019-01-15 14:32:16
【问题描述】:

你好,一月快乐!

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

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

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

索引:

  • provider, siteId, accountId: unique

数据结构:

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

HTTP动词GETDELETE和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 动词 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`

真的欢迎推荐!

【问题讨论】:

    标签: rest restful-url


    【解决方案1】:

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

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

    考虑RESTful;当您在将应用程序注册到特定站点之前使用 api 查找站点或特定站点时,响应中的“站点”对象将引用为该站点注册应用程序的位置。此链接可能包含 siteId。但是,如果它只是一个您可以注册任何网站的 url,则 siteId 在 url 中将没有位置,甚至不会成为该特定响应的一部分。

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

    【讨论】:

    • 是的,siteId 和 accountId 很奇怪,但这是一个特定请求,以确保只有预期的站点/帐户才能访问应用程序,即使应用程序可以很容易被唯一的_id(又名appId)检索。感谢您的回复,感谢您的反馈。
    猜你喜欢
    • 2020-01-16
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多