【问题标题】:REST api : correctly ask for an actionREST api:正确请求操作
【发布时间】:2015-06-22 13:40:53
【问题描述】:

我目前正在开发一个 REST api。我已经阅读了几次如何正确处理端点,使用协议(post、put、...)来定义应该执行的操作。

假设我有一个引号列表。我有:

  • 一个 GET 端点 /quotes 让我得到我的所有报价
  • 发布新报价的 POST /quote
  • 获取 /quotes/ID 以获取单引号
  • 一个 PUT /quote/ID 来更新报价。

现在我想添加以下功能:

  • 与其他成员分享报价
  • 将引用标记为收藏
  • 取消标记

我应该使用什么端点? /quote/ID/share 似乎是一个糟糕的主意。我想到了一个带有“action”参数的 POST 到 /quote/ID,它告诉脚本要对报价执行什么操作,这是正确的吗?

【问题讨论】:

  • 演技怎么样?请描述什么是“会员”。成员是 REST 资源吗?

标签: api rest endpoint


【解决方案1】:

尝试将 API 从您的应用程序逻辑中分离出来。从 API 获取报价,从现在开始 API 不应该关心你对这些数据做了什么。将引号标记为收藏夹也是如此。如何标记某些内容是您的应用程序和用户数据库的问题。同样,API 应该只关心正确回答您的 GET。

将 REST API 想象成一个数据库——你可以从那里获取数据,你可以 PUT 或 POST 一些数据,但是共享或标记之类的事情应该在应用程序中完成。

编辑

关于端点。

  • GET/POST/PUT /quote[s] 应该只关心引号;
  • PUT/POST /user/{userId}/action 和 {"type": "share", "target": "otherUserId", "quoteId": 123} 之类的 POST 数据可用于在数据库中保存有关操作的数据。

【讨论】:

  • 您能否详细说明一下?
  • @mef,我应该深入了解更多细节吗?
  • 我认为给出他可能用于他的特定用例的示例端点会有所帮助。
  • 为什么不也将共享创建为实体?
  • 引用就像图书馆里的书——你可以得到它们,甚至可以做一些编辑(用铅笔在帖子上做标记,坏事),但你不存储关于读者的信息in 书。您最好选择像@Opal 建议的单独实体——比如“统计”或其他一些元数据。
猜你喜欢
  • 2018-11-24
  • 2019-02-18
  • 1970-01-01
  • 2021-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-27
相关资源
最近更新 更多