rest - 允许以多种方式创建资源的 RESTful 方式?
问题描述
通常我使用httpPOST
请求来创建一个新资源。例如,您可以有一个book
模型和 API,如下所示:
模型
interface Book{
isbn: string, // primary key
title: string,
author: string,
rating: number,
}
API
GET api/books -> get all books
GET api/books/{isbn} -> get one book by isbn
POST api/books/ -> create new books
PATCH api/books/{isbn} -> update existing book by isbn
// and more..
isbn
只有当书有 a 、 atitle
和 a时,才能存储一author
本书。
现在有两个客户在他们想要创建一个新的图书项目时有不同的可用信息。例如,第一个客户端只知道 isbn,而第二个客户端有isbn
,title
并且author
可用。
后端可以访问私有 API,它可以在其中获取详细信息,例如title
给author
定的isbn
. 两个客户端都无权访问此 API。
第一个客户端可以使用POST api/books/
endoint 创建一个新的书籍项目,因为它具有所有可用的强制性信息。问题是第二个客户应该如何创建一个新项目。
我目前有两个选择:
- 只需将 发送
isbn
到 ,POST api/books/
后端就会自动从私有 API 中获取title
和。author
然后它将所有这些作为新项目存储在数据库中 - API 公开了一个新端点
GET api/books/{isbn}/info
,后端调用私有 API 并将信息(包括title
作者和作者)返回给客户端。然后客户端可以POST api/books/
像第一个客户端一样请求创建一个新的书项。
问题
上述选项之一实际上是 RESTful 吗?
在针对此类用例进行 RESTful API 设计时,是否有最佳实践?
解决方案
推荐阅读
- c# - 如何从 C# 返回 Python 脚本结果而不打印?
- google-app-engine - 发布/订阅推送返回 503 用于基本缩放
- javascript - 如何从不带引号的 WebAPI 控制器发送带有 javascript 函数的 JSON
- node.js - 节点:仅当有值时如何向输入显示值
- php - Laravel 5.8+从查询中获取列和行数组
- node.js - 使用 vue 模板读取文件
- android - 我如何在 CalendarView 中显示我的目标名称?
- r - 根据另一列的值替换列中的 NA
- angularjs - 为什么在 AngularJS 中的 ng-repeat 中 ng-click 不会触发函数?
- c++11 - 为什么我无法为迭代器分配矢量索引值?