首页 > 解决方案 > REST API 最佳实践

问题描述

我想知道在 REST API 和数据库设计方面这种情况的最佳实践是什么。

场景是我们的书的页面有单词。

这里有什么完整的解决方案?

标签: restdatabase-design

解决方案


我是否需要以某种方式定义我引用哪种类型的页面 id?我会说这取决于您要查询的内容

如果您正在GET阅读一本书,则书籍的页面从 1 开始按顺序编号。

GET /books/my_external_id/pages/1

以上对我来说很有意义,因为您要的是Page1Book标识的my_external_id. 那PageWord与它相关联。因此,您的数据模型由以下对象组成:

Book有 1 个或更多Page有 1 个或更多Word

以上可用于为您的书籍、页面和文字世界建模。my_external_id只是用来进入那个书本世界。即,这是您获得一本书的唯一途径。如果您进入实体图书馆,您需要一张图书馆会员卡才能取出一本书,但您不需要该卡来阅读这本书,因为这本书具有页面和文字等内在属性。因此,一旦您使用my_external_id(实际上是您的借书证)来获取您的书,您应该能够从那时起使用数据模型:

GET /books/my_external_id/pages/1
GET /books/my_external_id/pages/1/words/
GET /books/my_external_id/pages/1/words/23

您的其他入口点(迷你图书馆卡?)可用于在不同点输入您的数据模型,假设my_external_page_id并且my_external_word_id在所有书籍中都是唯一的:

GET /pages/my_external_page_id
GET /words/my_external_word_id

但之后您将处于“数据模型”模式,即获取页面上的第 50 个单词:

GET /pages/my_external_page_id/50

使用50th 词代替my_external_word_id,这是一个入口点,而不是数据模型 ( 50)。

更新工作相同。只需选择要处理的模型对象:

获取一本书的第 10 页:

GET /pages/my_external_page_id

获取该页面的所有单词:

GET /pages/my_external_page_id/words

更新第 10 页的第 20 个字:

PUT /pages/my_external_page_id/words/20

以上使用数据模型方法。my_external_page_id得到一个Pagewhich 有Word实例,你想更新第 20个Word实例,而不是使用my_external_word_idwhich 会返回一个Word实例。

最终,您的模型可能是:

Bookid, title, author, isbn,numberOfPageslistOfPages一个Page实例列表。

Pageid, 和一个Word实例列表。它也可以有number,但这只与Book拥有它的人有关。要获得第 10Page个,Book您可以通过listOfPagesinBook或迭代listOfPages直到找到Pagewith number = 10

Word 有idtext

除非您想独立于实例访问Page和实例,否则这应该足够了,但您最终需要在过程中的某个地方,因为这是s 和s 的唯一来源。WordBookBookPageWord


推荐阅读