Посилання та вбудовування
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
}
]
}
}
],
[]
]
}
}