Посилання та вбудовування
WP REST API додає посилання на можливі маршрути у всіх відповідях API, це дозволяє дізнатися які ще пов’язані маршрути можливі. REST API в повному обсязі відповідає HAL стандарту , але властивості ._links і ._embedded тут використовуються оскільки описано нижче.
_links (посилання)
Ця властивість у json даних відповіді містить карту посилань на інші пов’язані з поточним запитом ресурси . Зв’язок показує, як зазначені в _links ресурси відносяться до основного ресурсу. Наприклад:
author
— показує автора поточного ресурсу (наприклад, поста) і показує маршрут цього автора.wp:term
— показує які пост має мітки або рубрики і за якими маршрутами до них можна звернутися.
Зв’язки схожі на HTML теги <link> або посилання виду <a rel=””> .
Зв’язок може бути зазначений як:
- Стандартна .
- URI – наприклад https://api.w.org/term .
- Компактний URI – наприклад wp: term . Компактний URI для забезпечення повної сумісності може бути перетворений на повний вигляд.
Кожен зв’язок у _links містить об’єкт даних, в якому зазначено:
href
– Це посилання (маршрут).другие свойства
— тип контенту, додаткова інформація, дані про те, що можна зробити з посиланням.
Приклад відповіді /wp-json/wp/v2/posts/42
{ "id": 42, ... "_links": { "collection": [ { "href": "https://demo.wp-api.org/wp-json/wp/v2/posts" } ], "author": [ { "href": "https://demo.wp-api.org/wp-json/wp/v2/users/1", "embeddable": true } ] } }
Приклад /wp-json/wp/v2/comments/1
{ "id": 1, ... "_links": { "self": [ { "href": "http://example.com/wp-json/wp/v2/comments/1" } ], "collection": [ { "href": "http://example.com/wp-json/wp/v2/comments" } ], "up": [ { "embeddable": true, "post_type": "post", "href": "http://example.com/wp-json/wp/v2/posts/11" } ] } }
Приклад /wp-json/wp/v2/posts/72
{ "id": 72, ... "_links": { "self": [ { "href": "http://example.com/wp-json/wp/v2/posts/72" } ], "collection": [ { "href": "http://example.com/wp-json/wp/v2/posts" } ], "about": [ { "href": "http://example.com/wp-json/wp/v2/types/post" } ], "author": [ { "embeddable": true, "href": "http://example.com/wp-json/wp/v2/users/1" } ], "replies": [ { "embeddable": true, "href": "http://example.com/wp-json/wp/v2/comments?post=72" } ], "version-history": [ { "count": 8, "href": "http://example.com/wp-json/wp/v2/posts/72/revisions" } ], "predecessor-version": [ { "id": 97, "href": "http://example.com/wp-json/wp/v2/posts/72/revisions/97" } ], "wp:attachment": [ { "href": "http://example.com/wp-json/wp/v2/media?parent=72" } ], "wp:term": [ { "taxonomy": "category", "embeddable": true, "href": "http://example.com/wp-json/wp/v2/categories?post=72" }, { "taxonomy": "post_tag", "embeddable": true, "href": "http://example.com/wp-json/wp/v2/tags?post=72" } ], "curies": [ { "name": "wp", "href": "https://api.w.org/{rel}", "templated": true } ] } }
Для запитів колекцій (коли повертається список об’єктів), властивість _links , є у кожному елементі списку. А посилання верхній рівень ресурсу перебуває у заголовку відповіді у властивості Link
.
Якщо ваш клієнт не вміє читати заголовки відповіді, то їх можна помістити в саму відповідь, вказавши параметр _envelope .
Приклад /wp-json/wp/v2/posts/72
Попелюшки відповіді:
Access-Control-Allow-Headers : Authorization, Content-Type Access-Control-Expose-Headers: X-WP-Total, X-WP-TotalPages Allow : GET, POST, PUT, PATCH, DELETE Cache-Control: no-cache, must-revalidate, max-age=0 Connection : Keep-Alive Content-Length : 5459 Content-Type: application/json; charset=UTF-8 Date : Wed, 29 Aug 2018 23:48:25 GMT Expires : Wed, 11 Jan 1984 05:00:00 GMT Keep-Alive: timeout=10, max=99 Link : <http://example.com/provrka-klika-po-ssylke/>; rel="alternate"; type=text/html Server : Apache X-Content-Type-Options: nosniff X-Robots-Tag : noindex
_embed (вбудовування)
Деякі відповіді містять посилання на пов’язані ресурси (маршурти), такі посилання розміщуються під ключем _links . Наприклад, пост може містити посилання на батьківську посаду або посилання на коментар до посту.
Пов’язані ресурси, у яких є можливість вбудовування (властивість embeddable = true ), можна відразу додати у відповідь, щоб отримати всі дані в одному запиті і не створювати додаткових HTTP запитів. Так, клієнти можуть отримати сам ресурс, а також пов’язані з ним дані в одному запиті.
Для цього потрібно вказати параметр запиту ?_embed . У цьому випадку пов’язані ресурси будуть вбудовані в тіло відповіді і будуть розташовані під ключем_embedded
приклад
Відправимо звичайний запит:
GET http://example.com/wp-json/wp/v2/posts/113
{ "id": 113, "date": "2018-08-17T02:57:44", ... "categories": [1], "tags": [], "_links": { "self": [ { "href": "http://example.com/wp-json/wp/v2/posts/113" } ], ... } }
Тепер відправимо _embed запит:
GET http://example.com/wp-json/wp/v2/posts/113?_embed
{ "id": 113, "date": "2018-08-17T02:57:44", ... "categories": [1], "tags": [], "_links": { "self": [ { "href": "http://example.com/wp-json/wp/v2/posts/113" } ], ... }, "_embedded": { "author": [ { "id": 1, "name": "kama", "url": "", "description": "", "link": "http://example.com/author/kama/", "slug": "kama", "avatar_urls": { "24": "http://1.gravatar.com/avatar/155e695ab2251ee3c482c1e3e690683b?s=24&d=mm&r=g", "48": "http://1.gravatar.com/avatar/155e695ab2251ee3c482c1e3e690683b?s=48&d=mm&r=g", "96": "http://1.gravatar.com/avatar/155e695ab2251ee3c482c1e3e690683b?s=96&d=mm&r=g" }, "_links": { "self": [ { "href": "http://example.com/wp-json/wp/v2/users/1" } ], "collection": [ { "href": "http://example.com/wp-json/wp/v2/users" } ] } } ], "wp:term": [ [ { "id": 1, "link": "http://example.com/cat/my-plugins/", "name": "My Plugins", "slug": "my-plugins", "taxonomy": "category", "_links": { "self": [ { "href": "http://example.com/wp-json/wp/v2/categories/1" } ], "collection": [ { "href": "http://example.com/wp-json/wp/v2/categories" } ], "about": [ { "href": "http://example.com/wp-json/wp/v2/taxonomies/category" } ], "wp:post_type": [ { "href": "http://example.com/wp-json/wp/v2/posts?categories=1" } ], "curies": [ { "name": "wp", "href": "https://api.w.org/{rel}", "templated": true } ] } } ], [] ] } }
Приклад відповіді /wp-json/wp/v2/posts/42?_embed
{ "id": 42, ... "_links": { "collection": [ { "href": "https://demo.wp-api.org/wp-json/wp/v2/posts" } ], "author": [ { "href": "https://demo.wp-api.org/wp-json/wp/v2/users/1", "embeddable": true } ] }, "_embedded": { "author": { "id": 1, "name": "admin", "description": "Site administrator" } } }
Приклад /wp-json/wp/v2/posts/72?_embed
{ "id": 72, ... "_links": { "self": [ { "href": "http://example.com/wp-json/wp/v2/posts/72" } ], "collection": [ { "href": "http://example.com/wp-json/wp/v2/posts" } ], "about": [ { "href": "http://example.com/wp-json/wp/v2/types/post" } ], "author": [ { "embeddable": true, "href": "http://example.com/wp-json/wp/v2/users/1" } ], "replies": [ { "embeddable": true, "href": "http://example.com/wp-json/wp/v2/comments?post=72" } ], "version-history": [ { "count": 8, "href": "http://example.com/wp-json/wp/v2/posts/72/revisions" } ], "predecessor-version": [ { "id": 97, "href": "http://example.com/wp-json/wp/v2/posts/72/revisions/97" } ], "wp:attachment": [ { "href": "http://example.com/wp-json/wp/v2/media?parent=72" } ], "wp:term": [ { "taxonomy": "category", "embeddable": true, "href": "http://example.com/wp-json/wp/v2/categories?post=72" }, { "taxonomy": "post_tag", "embeddable": true, "href": "http://example.com/wp-json/wp/v2/tags?post=72" } ], "curies": [ { "name": "wp", "href": "https://api.w.org/{rel}", "templated": true } ] }, "_embedded": { "author": [ { "id": 1, "name": "kama", "url": "", "description": "", "link": "http://example.com/author/kama/", "slug": "kama", "avatar_urls": { "24": "http://1.gravatar.com/avatar/155e695ab2251ee3c482c1e3e690683b?s=24&d=mm&r=g", "48": "http://1.gravatar.com/avatar/155e695ab2251ee3c482c1e3e690683b?s=48&d=mm&r=g", "96": "http://1.gravatar.com/avatar/155e695ab2251ee3c482c1e3e690683b?s=96&d=mm&r=g" }, "_links": { "self": [ { "href": "http://example.com/wp-json/wp/v2/users/1" } ], "collection": [ { "href": "http://example.com/wp-json/wp/v2/users" } ] } } ], "wp:term": [ [ { "id": 1, "link": "http://example.com/cat/my-plugins/", "name": "My Plugins", "slug": "my-plugins", "taxonomy": "category", "_links": { "self": [ { "href": "http://example.com/wp-json/wp/v2/categories/1" } ], "collection": [ { "href": "http://example.com/wp-json/wp/v2/categories" } ], "about": [ { "href": "http://example.com/wp-json/wp/v2/taxonomies/category" } ], "wp:post_type": [ { "href": "http://example.com/wp-json/wp/v2/posts?categories=1" } ], "curies": [ { "name": "wp", "href": "https://api.w.org/{rel}", "templated": true } ] } } ], [] ] } }