Формат URL для PATCH, который связывает два объекта - PullRequest
0 голосов
/ 03 июня 2019

Я не уверен, что самый лучший способ RESTful + HATEOS - это достичь моей цели.

Я хочу использовать операцию PATCH для обновления полей двух объектов, создавая взаимосвязь между ними, я не уверен, что текущий способ, которым я это делаю, является наиболее РЕСТАЛЬНЫМ способом сделать это.

Например,

У меня есть API, который управляет книгами и авторами.

У меня есть объект Author со списком книг.

{
        "authorId": 1,
        "email": "fred@gmail.com",
        "firstName": "f",
        "lastName": "red",
        "links": [
            {
                "rel": "self",
                "href": "http://localhost:8080/authors/1",
            },
            {
                "rel": "books",
                "href": "http://localhost:8080/authors/1/books",
            }
}

и Книга:

{
        "bookId": 1,
        "title": "REST is Hard",
        "links": [
            {
                "rel": "self",
                "href": "http://localhost:8080/books/1",
            },
            {
                "rel": "author",
                "href": "http://localhost:8080/authors/1",
            }
}

Вышеуказанные объекты являются DTO. У меня есть бэкэнд Spring Boot, который управляет отношениями - это актуально только в том смысле, что реальные объекты сущностей выглядят немного иначе, и я думаю, что они немного дырявые.

В настоящее время API свяжет книгу и автора вместе, когда он получит ПАТЧ против http://localhost:8080/author/1/book/1

API свяжет author/1 и book/1 - Spring Boot добавляет сущность book/1 в список книг в сущности author/1 и устанавливает для поля author book/1 значение `author / 1 '- то есть это двунаправленное отношение (автор) ко многим (книги).

Реализация в стороне (и я думаю, что есть еще улучшения, которые я могу сделать, чтобы реализация была лучше), каков наилучший способ формирования этой ссылки с помощью вызова RESTful?

REST и HATEOS достаточно болтливы, и я хотел не делать два URL-вызова (то есть один PATCH на author/1 и другой патч на book/1), следовательно, http://localhost:8080/author/1/book/1.

Есть ли канонически правильный «RESTful» способ сделать это? Как бы вы это реализовали?

...