Продолжаем серию постов об особенностях использования протокола OData (см. часть 1, часть 2 ).
OData оговаривает что объекты можно создавать и апдейтить используя стандартный http запрос POST, PATCH и PUT. Тело запроса должно содержать JSON описание объекта, который мы хотим проапдейтить или добавить в базу.
Если добавляемый объект не существует — то создается новый объект.
Если объект существует — то поведение отличается:
В тексте OData стандарта затерялось несколько важных фраз:
В результате не все знают, что OData позволяет добавлять объекты вместе с дочерними объектами. Например, мы можем в коллекцию книг добавить новую книгу сразу вместе с ее авторами:
В соответствии со стандартом будут созданы (или проапдейчены) все необходимые объекты и будет установлена связь между ними. После этого Вы сможете получить книгу, или книгу вместе с ее авторами, получить список людей (в который войдут новые люди), писателей, экспертов, получить людей с их книгами и т.д. (см. часть 1, часть 2 )
1. Имея возможность добавлять объекты вместе с вложенными объектами, можно просто устанавливать связи между ними.
В вышеприведенном примере мы добавляли книгу с автором, который имел поле likes
«likes»: [{ «id»: «book186» }, { «id»: «book18» }, { «id»: «book31» }]
В соответствии со стандартом будут созданы все книги (или проапдейчены, если они уже существуют) и установлены связи между человеком и любимыми книгами. Но поскольку книги имеют только поле id то апдейтить нечего — остается только выставить связи.
2. Существует и другой способ установки связей.
Список любимых книг человека с id='person191' доступен через URL
.../persons(person191)/likes
мы можем добавить книги, послав запрос PUT, POST или PATCH используя этот URL
Замечание: OData допускает, что объекты могут ссылаться на множество других объектов и на них могут ссылаться сразу много объектов. Книга может иметь несколько авторов, а автор может написать много книг. Человек может быть и студентом, и преподавателем одновременно. Объекты могут принадлежать сразу многим коллекциям.
Если Вас заинтересовал данный пост, Вы можете также посмотреть нашу документацию и примеры использования REST API, а также примеры с использованием JavaScript библиотеки
Продолжение следует…
OData оговаривает что объекты можно создавать и апдейтить используя стандартный http запрос POST, PATCH и PUT. Тело запроса должно содержать JSON описание объекта, который мы хотим проапдейтить или добавить в базу.
Если добавляемый объект не существует — то создается новый объект.
Если объект существует — то поведение отличается:
- PUT — заменяет объект на новый
- PATCH — апдейтит поля объекты новыми значениями
- POST — поведение не оговорено в стандарте (в databoom POST аналогичен PATCH)
4. добавление сложных объектов вместе со связанными объектами
В тексте OData стандарта затерялось несколько важных фраз:
A request to create an entity that includes related entities, represented using the appropriate inline representation, is referred to as a “deep insert” … On success, the service MUST create all entities and relate them.
В результате не все знают, что OData позволяет добавлять объекты вместе с дочерними объектами. Например, мы можем в коллекцию книг добавить новую книгу сразу вместе с ее авторами:
{
"id": "book1",
"title": "Cannibal’s Cookbook",
"author":[
{
"id": "person45",
"collections": [{ "id": "persons" }, { "id": "writers" }],
"firstname": "John",
"lastname": "Doe",
"age": 69,
"likes": [{ "id": "book55" }, { "id": "book19" }, { "id": "book66" }]
},
{
"id": "person191",
"collections": [{ "id": "persons" }, { "id": "experts" }],
"firstname": "Lamar",
"lastname": "Courtenay",
"age": 37,
"likes": [{ "id": "book186" }, { "id": "book18" }, { "id": "book31" }]
}
]
}
В соответствии со стандартом будут созданы (или проапдейчены) все необходимые объекты и будет установлена связь между ними. После этого Вы сможете получить книгу, или книгу вместе с ее авторами, получить список людей (в который войдут новые люди), писателей, экспертов, получить людей с их книгами и т.д. (см. часть 1, часть 2 )
5. установление связей между объектами
1. Имея возможность добавлять объекты вместе с вложенными объектами, можно просто устанавливать связи между ними.
В вышеприведенном примере мы добавляли книгу с автором, который имел поле likes
«likes»: [{ «id»: «book186» }, { «id»: «book18» }, { «id»: «book31» }]
В соответствии со стандартом будут созданы все книги (или проапдейчены, если они уже существуют) и установлены связи между человеком и любимыми книгами. Но поскольку книги имеют только поле id то апдейтить нечего — остается только выставить связи.
2. Существует и другой способ установки связей.
Список любимых книг человека с id='person191' доступен через URL
.../persons(person191)/likes
мы можем добавить книги, послав запрос PUT, POST или PATCH используя этот URL
Замечание: OData допускает, что объекты могут ссылаться на множество других объектов и на них могут ссылаться сразу много объектов. Книга может иметь несколько авторов, а автор может написать много книг. Человек может быть и студентом, и преподавателем одновременно. Объекты могут принадлежать сразу многим коллекциям.
Если Вас заинтересовал данный пост, Вы можете также посмотреть нашу документацию и примеры использования REST API, а также примеры с использованием JavaScript библиотеки
Продолжение следует…
strangeworks
Все это конечно хорошо, но вот в чем был смысл разбивать 3 микрозаметки на 3 поста? Я только, грубо говоря, достал попкорн начал погружаться в сюжет, а тут «бац!», и мне показывают «the end».
shai_hulud
Надо же парням пиарить свой продукт. Вот они и пытаются создать информационное присутствие на Хабре.