Продолжаем серию постов об особенностях использования протокола OData (см. часть 1, часть 2 ).
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 библиотеки
Продолжение следует…
ссылка на оригинал статьи http://habrahabr.ru/post/263435/
Добавить комментарий