Нужно ли мне определять, на какой тип идентификатора страницы я ссылаюсь
каким-то образом?
Я бы сказал, что это зависит от того, что вы запрашиваете
Если вы GET
читаете книгу, книги имеют номера страниц, последовательно пронумерованные от 1.
GET /books/my_external_id/pages/1
вышесказанное имеет смысл для меня, поскольку вы просите Page
1 из Book
, обозначенного my_external_id
. С этим Page
будет связано Word
. Итак, ваша модель данных состоит из следующих объектов:
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
с использованием 50
-го слова вместо my_external_word_id
, которое является точкой входа, а не моделью данных (50
).
Обновление работает так же. Просто выберите модель объекта для работы:
получите 10-ю страницу книги:
GET /pages/my_external_page_id
получить все слова для этой страницы:
GET /pages/my_external_page_id/words
обновить 20-е слово на 10-й странице:
PUT /pages/my_external_page_id/words/20
Выше используется подход модели данных. my_external_page_id
возвращает вам Page
, который имеет Word
экземпляров, и вы хотите обновить 20-й Word
экземпляр, вместо использования my_external_word_id
, который бы возвращал один Word
экземпляр.
В конечном счете, ваша модель может быть:
Book
имеет id
, title
, author
, isbn
, numberOfPages
и listOfPages
список Page
экземпляров.
Page
имеет id
и список Word
экземпляров. Он также может иметь number
, но это относится только к Book
, которому он принадлежит. Чтобы получить 10 Page
из Book
, вы можете либо сделать это через listOfPages
in Book
, либо повторить listOfPages
, пока не найдете Page
с number = 10
.
Слово имеет id
и text
.
Этого должно быть достаточно, если вы не хотите обращаться к экземплярам Page
и Word
независимо от экземпляров Book
, но в конечном итоге вам потребуется Book
где-то в процессе, поскольку это единственное место Page
s и Word
с.