如何为多对多关系设计 Restful uri

How to design Restful uri for ManyToMany Relation

我在为正在开发的应用程序选择数据库关系和 Restful URI 时感到困惑。

我正在制作一个具有以下要求的简单图书馆应用程序。

  1. 书籍可以属于许多类别,例如物理书籍属于教科书和科学类别。可以说书有很多categories/labels/tags.
  2. 查看某一类别的图书。
  3. 查看一本书的所有类别。
  4. 正在使用类别或图书信息搜索图书。
  5. 图书 CRUD 操作
  6. 标签 CRUD 操作

考虑到所有这些要求,我选择 ManyToMany 书籍和标签之间的关系。我已经使用 Hibernate Framework 实现了它。 现在,在为此设计 Restful 服务时,它变得非常 confusing.It 让我质疑 table 关系选择。

Restful uri 尚未生成。

/书籍

/books/{bookid}

/标签

/labels/{labelid}

但是当我想获取一本书的标签列表,或者一个标签的图书列表时。如何使用 Restful URI 映射它们。我能想到这个

/book/{bookid}/labels

但是考虑到这一点,如何映射获取一个标签的图书列表

我想知道我选择的table关系是否正确,如果是,如何针对它设计restful uri。如果不是,请纠正我并阐明这种情况。谢谢

您的网址看起来不错 - 为什么不简单地使用:

/labels/{labelid}/books

满足 'books with a label' 要求?

我会采取不同的策略并支持这些 URL:

// get all books
GET /books

// get all books labeled "Sci-fi" and "Romance"
GET /books?label=Sci-fi&label=Romance

// get a specific book
GET /books/1234

// get all labels
GET /labels

// get all labels for book 1234
GET /labels?bookId=1234

// get a specific label
GET /labels/Sci-fi

另一种选择是创建映射资源:

// get links to all labels for book 1234
GET /book-labels?bookId=1234

// get links to all books labeled Sci-fi
GET /book-labels?label=Sci-fi

Rest URI 是基于 "Resource" 的,您可能应该研究如何以及何时使用 "Sub-Resources"。 table 关系选择完全没问题,如果你想要任何其他复杂的 URI,那么你也可以在你的 URI 中使用 REGEX。您可以按照此 link 查看基于 REGEX 的 URI 匹配。 http://howtodoinjava.com/2013/05/12/jax-rs-path-regex-based-uri-matching/

针对您的情况:

==> 获取具有 labelId

的所有书籍的列表
   ../labels/{labelid}/books

==> 检查特定书籍是否与特定标签相关联。

   ../labels/{labelid}/books/{bookid}

==> 获取与图书关联的所有标签的列表。

   ../books/{bookid}/labels

==> 检查特定标签是否与特定书籍相关联

   ../books/{bookid}/labels/{labelid}