REST api : 正确要求一个动作
REST api : correctly ask for an action
我目前正在研究 REST api。我读过几次如何以正确的方式处理端点,使用协议(post、put、...)来定义应该执行的操作。
假设我有一个引号列表。我有:
- 一个 GET 端点 /quotes 让我得到我所有的报价
- a POST /quote 到 post 新报价
- a GET /quotes/ID 获取单引号
- a PUT /quote/ID 更新报价。
现在我想添加能力:
- 与其他成员分享报价
- 将报价标记为收藏
- 取消标记
我应该使用哪个端点? /quote/ID/share 似乎是个糟糕的主意。我想到了一个 POST 到 /quote/ID 和一个 "action" 参数,它告诉脚本对报价执行什么操作,这是正确的吗?
尝试将 API 与您的应用程序逻辑分开。从 API 你得到了报价,从现在开始 API 不应该关心你对这些数据做了什么。将引用标记为收藏夹也是如此。如何标记某些内容是您的应用程序和用户数据库的问题。同样,API 应该只关心正确回答您的 GET。
将 REST API 视为一个数据库——您可以从那里获取数据,您可以 PUT 或 POST 一些数据,但是共享或标记之类的事情应该在应用程序中完成。
编辑
关于端点。
GET/POST/PUT /quote[s]
应该只关心引号;
PUT/POST /user/{userId}/action
和 POST 数据,如 {"type": "share", "target": "otherUserId", "quoteId": 123}
可用于在数据库中保存 关于操作的数据 。
我目前正在研究 REST api。我读过几次如何以正确的方式处理端点,使用协议(post、put、...)来定义应该执行的操作。
假设我有一个引号列表。我有:
- 一个 GET 端点 /quotes 让我得到我所有的报价
- a POST /quote 到 post 新报价
- a GET /quotes/ID 获取单引号
- a PUT /quote/ID 更新报价。
现在我想添加能力:
- 与其他成员分享报价
- 将报价标记为收藏
- 取消标记
我应该使用哪个端点? /quote/ID/share 似乎是个糟糕的主意。我想到了一个 POST 到 /quote/ID 和一个 "action" 参数,它告诉脚本对报价执行什么操作,这是正确的吗?
尝试将 API 与您的应用程序逻辑分开。从 API 你得到了报价,从现在开始 API 不应该关心你对这些数据做了什么。将引用标记为收藏夹也是如此。如何标记某些内容是您的应用程序和用户数据库的问题。同样,API 应该只关心正确回答您的 GET。
将 REST API 视为一个数据库——您可以从那里获取数据,您可以 PUT 或 POST 一些数据,但是共享或标记之类的事情应该在应用程序中完成。
编辑
关于端点。
GET/POST/PUT /quote[s]
应该只关心引号;PUT/POST /user/{userId}/action
和 POST 数据,如{"type": "share", "target": "otherUserId", "quoteId": 123}
可用于在数据库中保存 关于操作的数据 。