Посилання та вбудовування

WP REST API додає посилання на можливі маршрути у всіх відповідях API, це дозволяє дізнатися які ще пов’язані маршрути можливі. REST API в повному обсязі відповідає HAL стандарту , але властивості ._links і ._embedded тут використовуються оскільки описано нижче.

Ця властивість у 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
							}
						]
					}
				}
			],
			[]
		]
	}
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *