Предположим, я хочу создать интерфейс RESTful, и я хочу работать с foo
s на основе их идентификаторов. Ничего нового здесь:Рекомендации по возврату представления ресурса, который также является коллекцией
GET /api/foo1
возвращает представление (например, с помощью JSON) изfoo1
.DELETE /api/foo1
удаляетfoo1
.
т.д.
Теперь позвольте мне сказать вам, что «Foo» является тип коллекции вещь. Поэтому я хочу, чтобы иметь возможность добавить «бар» на «Foo»:
PUT /api/foo1/bar3
добавляетbar3
кfoo1
.GET /api/foo1/bar3
возвращаетfoo1
.DELETE /api/foo1/bar3
удаляетbar3
отfoo1
.DELETE /api/foo1
удаляетfoo1
в целом.
Теперь остается вопрос: что делает GET /api/foo1
? Он просто возвращает представление foo1
, как я изначально предполагал в этом вопросе? Или он возвращает список баров? Или он возвращает представление foo1
, которое является описанием foo1
, а также содержит список всех содержащихся в нем баров?
Или GET /api/foo1
просто возвращает представление foo1
, как я предполагал в начале, и требуют PROPFIND
запроса перечислить бруски внутри foo1
(подход, принятый WebDAV)? Но для того, чтобы быть последовательным, не нужно ли мне менять все мои другие функции типа списка до PROPFIND
, что прямо противоречит всем этим тысячам учебных пособий RESTful, которые говорят, чтобы использовать список GET /api/foo1
для отображения содержимого?
Мне нравится ваш подход. На самом деле, это то же самое поведение, которое действительно объектно-ориентированные языки реализовать для массива или списка объектов: массива свойств объекта: длина, размеров, ReadOnly метод Массива ПолучитьЗначения - возвращает элемент свойство объекта Списка: Голова, Текущий Метод списка GetEnumerator - возвращает объект, который в свою очередь возвращает элементы –