首页 > 解决方案 > 允许以多种方式创建资源的 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,它可以在其中获取详细信息,例如titleauthor定的isbn. 两个客户端都无权访问此 API。

第一个客户端可以使用POST api/books/endoint 创建一个新的书籍项目,因为它具有所有可用的强制性信息。问题是第二个客户应该如何创建一个新项目。

我目前有两个选择:

  1. 只需将 发送isbn到 ,POST api/books/后端就会自动从私有 API 中获取title和。author然后它将所有这些作为新项目存储在数据库中
  2. API 公开了一个新端点GET api/books/{isbn}/info,后端调用私有 API 并将信息(包括title作者和作者)返回给客户端。然后客户端可以POST api/books/像第一个客户端一样请求创建一个新的书项。

问题

上述选项之一实际上是 RESTful 吗?
在针对此类用例进行 RESTful API 设计时,是否有最佳实践?

标签: rest

解决方案


推荐阅读