> CMS 튜토리얼 > Word누르다 > 데이터를 가져오는 WP REST API

데이터를 가져오는 WP REST API

PHPz
풀어 주다: 2023-09-04 14:05:01
원래의
788명이 탐색했습니다.

이 시리즈의 이전 부분에서는 WP REST API가 무엇인지, WordPress 백엔드를 사용하여 더 나은 애플리케이션을 구축하는 데 어떻게 도움이 되는지 살펴보았습니다.

그런 다음 인증된 요청을 생성하기 위해 서버에서 인증을 설정하는 두 가지 방법을 살펴보았습니다. 첫 번째는 기본 인증(Basic Authentication) 방식으로, 개발 환경에서 유용하며 설정하는 데 많은 시간이 걸리지 않아 신속한 프로토타이핑이 가능합니다. 고급 인증 방법은 OAuth 2.0으로, 기본 인증 방법보다 훨씬 안전하므로 프로덕션 환경에 권장됩니다.

이제 인증 설정 방법을 이해했으므로 인증된 요청을 생성하여 WP REST API의 모든 기능을 잠금 해제할 준비가 되었습니다. 이 시리즈에서는 사용 편의성 때문에 기본 인증을 사용하지만 프로덕션 서버에는 OAuth 2.0 인증(WordPress REST API 인증 플러그인에서 제공)을 사용하는 것이 좋습니다.

WordPress REST API 인증 플러그인은 API 엔드포인트에 대한 액세스를 제어하는 ​​인증 메커니즘을 추가하여 WordPress REST API의 보안을 강화합니다. 몇 가지 인증 방법이 제공됩니다:

  • 기본인증
  • API 키 인증
  • JWT 인증
  • OAuth 2.0 인증

인증을 설정한 후 다양한 API 엔드포인트에 대한 액세스 제어 규칙을 정의할 수 있습니다. 이를 통해 특정 엔드포인트에 액세스할 수 있는 사용자 또는 역할을 구성할 수 있습니다. 또한 사용자 역할, 기능 또는 특정 사용자 ID를 기반으로 액세스를 제한하는 옵션도 제공합니다.

이번 시리즈에서는 WP REST API에 대한 첫 번째 실습 경험을 얻을 것입니다. 우리는:

  • 분석 GET 요청 구조
  • 확인해 보세요 OPTIONSAPI 자체 문서화 방법 요청
  • 서버에 데이터 검색 요청 보내기
  • 속성, 스키마, 링크를 포함한 서버 응답 분석
  • 요청 받기의 구조
  • OPTIONS 요청을 사용하여 API 탐색
  • 게시물 처리 중
  • 게시물 수정, 카테고리 및 태그 사용
  • 다른 리소스 사용

그러면 먼저 간단한 GET 요청의 구조를 분석해 보겠습니다.

GET 요청 분석

WP REST API를 사용하여 데이터를 검색하는 방법을 자세히 알아보기 전에 서버로 전송되는 요청의 구문을 숙지해야 합니다. 이는 WP REST API와의 향후 상호 작용을 위한 견고한 기반을 제공할 것입니다.

서버로 전송된 다음 요청을 고려하세요.

으아악

우리가 보내는 요청 유형은 GET — 我们在本系列的第一部分中介绍的六个 HTTP 动词之一。 GET입니다. 이 시리즈의 1부에서 다룬 6가지 HTTP 동사 중 하나입니다.

요청은 서버에서 데이터를 검색하는 데 사용됩니다. 따라서 서버에서 실행될 때 위 요청은 모든 게시물 개체의 컬렉션을 JSON 데이터로 검색합니다.

요청 URI를 고려하면 다음 부분으로 나눌 수 있습니다.
  • https://localserver/
  • : 내 로컬 개발 서버의 URL입니다. WordPress 설치 위치에 따라 어떤 URL이든 될 수 있습니다.
  • /wp-json
  • : WP REST API의 엔드포인트 접두사.
  • /wp
  • : WP REST API의 네임스페이스.
  • /v2
  • : WP REST API 버전.
  • /posts
  • : 이는 서버에서 검색하려는 리소스입니다.

네임스페이스는 각각 RESTful API에 대한 자체 추상화 계층을 제공하는 여러 플러그인을 실행할 때 발생할 수 있는 재정의를 방지합니다. 따라서 각 추상화는 자체 경계 내에서 작동하며 다른 추상화에 속한 메서드 및 속성에 영향을 주지 않습니다.

위 URI를 사용하여 리소스(게시물) 모음을 검색하는 것 외에도 해당 ID를 언급하여 특정 리소스를 검색할 수도 있습니다:

으아악

위 요청은 ID 100의 게시물 리소스를 찾기 때문에 게시물 개체를 반환합니다.

일반적으로 특정 기준과 일치하는 게시물도 검색해야 합니다. 예를 들어 다음 코드 조각에 표시된 것처럼 게시물을 카테고리별로 필터링할 수 있습니다.

으아악 categories위 요청을 보내면 ID가 20과 30인 카테고리에 속하는 모든 게시물을 검색할 수 있습니다. 보시다시피

매개변수에 하나 이상의 카테고리 ID를 전달할 수 있으며 카테고리 분류 내에서 특정 용어가 할당된 게시물을 반환해야 합니다.

WP_Query()위 구문은 다음

호출과 동일합니다.

으아악 GET따라서 위

요청은 ID가 20과 30인 두 카테고리에 속하는 게시물 목록을 검색합니다. 요소가 세 개 이상인 배열 매개변수에도 동일한 구문을 사용할 수 있습니다.

GET 请求并提供其参数,是时候看看 OPTIONS 请求了。 OPTIONS이제

요청의 형식을 지정하고 해당 매개변수를 제공하는 방법을 살펴보았으므로 이제

요청을 살펴보겠습니다. OPTIONS 요청을 사용하면 API 탐색이 쉬워지고 실제로 지원하는 매개변수와 함께 엔드포인트에서 사용 가능한 모든 HTTP 메서드를 기록하여 API에 더 쉽게 액세스할 수 있도록 하는 자체 문서화 방법 역할을 합니다.

API를 탐색하려면 OPTIONS요청을 사용하세요

앞서 언급했듯이 /wp/v2/posts 路由发送 OPTIONS 请求,以检查它支持哪些端点以及我们可以沿 GET요청은 API를 탐색하는 데 매우 유용합니다. 이는 경로에 속하는 모든 끝점을 언급하고 이러한 끝점에서 지원되는 CRUD 작업에 대한 매개 변수 목록을 제공합니다.

/wp/v2/posts 경로에

요청을 보내서 이 경로가 지원하는 엔드포인트와 GET쿼리 데이터 요청: <p> 으아악 <code class="inline">OPTIONS 请求 /wp/v2/posts위 요청을 보내기 위해 컬을 사용했지만 Postman을 포함하여 원하는 도구를 사용할 수 있습니다. 서버 경로를 포함하여 위 경로의 전체 경로를 포함해야 합니다.

으아악
  • 요청 /wp/v2/posts 경로는 5가지 속성을 포함하는 JSON 형식의 데이터를 반환합니다. 命名空间
  • 方法
  • 端点
  • schema
  • _links

namespace 属性标识当前插件的命名空间。在我们的例子中,它是 wp/v2

으아악 🎜🎜, WP REST API 버전 2를 나타냅니다. 우리는 이전 섹션에서 네임스페이스와 해당 서비스의 목적에 대해 이미 배웠습니다. 🎜
{
    ...
    "methods": [
        "GET",
        "POST"
    ],
    ...
}
로그인 후 복사

methods 属性包含当前路由支持的所有方法的数组。通过查看上述请求返回的响应,可以清楚地看到 /wp/v2/posts 路由支持两种方法,即 GET POST 。这意味着我们可以使用 /wp/v2/posts 路由来检索帖子,以及创建新帖子。我们将在本系列的下一部分中处理 POST 方法,因此我们暂时只关注 GET 方法。

下一个属性 — endpoints — 包含当前路由支持的端点数组。此属性直接链接到前面提到的 methods 属性,因为它列出了支持的方法的端点。

{
    ...
    "endpoints": [
        {
            "methods": [
                "GET"
            ],
            "args": {...},
            "allow_batch": {"v1":true}
        },
        {
            "methods": [
                "POST"
            ],
            "args": {...},
            "allow_batch": {"v1":true}
        }
    ],
    ...
}
로그인 후 복사

endpoints 属性包含对象值,而对象值又包含三个属性,即 methodsargsallow_batchmethods 属性包含 HTTP 方法的数组,下一个 args 属性包含这些方法支持的所有参数。最后,allow_batch 属性用于了解端点是否支持批量请求功能。这些是我们以 URI 参数的形式随请求发送的参数。

查看 GET 方法支持的参数,我们发现了 20 多个参数,包括 contextpagerequiredtypedefaultrequired 属性指示该参数是否为必需,而 default 属性表示该参数的默认值。另一方面, type 属性指示应传递的值的类型。除此之外,它还可能包含其他特定于参数的属性。

"methods": [
        "GET"
],
"args": {
    "context": {
        "required": false,
        "default": "view",
        "type": "string",
        "description": "Scope under which the request is made; determines fields present in response."
    },
    "page": {
        "required": false,
        "default": 1,
        "type": "integer",
        "description": "Current page of the collection.",
        "minimum": "1"
    },
    "per_page": {
        "required": false,
        "default": 1,
        "type": "integer",
        "description": "Maximum number of items to be returned in result set.",
        "minimum": "1",
        "maximum": "100"
    },
}
로그인 후 복사

返回的响应中的 schema 属性记录了当前资源的所有属性。该架构定义了 JSON 格式的数据结构。 WP REST API 中使用的架构格式基于 JSON 架构规范草案 4。

最后一个 _links 属性包含一个对象数组,其中包含关联资源的链接。对象中的键指定关系类型(例如 authorcollectionselfcomments 等) ,其值是指向相关资源的链接。该链接标准基于 HAL(超文本应用语言)。您可以通过阅读 Mike Kelley 撰写的规范来了解有关 HAL 的更多信息。

以类似的方式,我们也可以向其他路由(包括用户、评论、媒体、页面等)发送 OPTIONS 请求,以检查其支持的方法和参数。 OPTIONS 请求是您使用 WP REST API 时最好的朋友。

WP REST API 提供了另一种评估 API 可用性的方法,即向 /wp-json 索引路由发送 GET 请求。这将列出所有路由及其端点及其支持的方法和参数。

$curl -X GET http://wordpress-server/wp-json
로그인 후 복사

上述请求将返回一个包含路由属性的响应对象,如下所示:

获取数据的WP REST API

此功能非常强大,因为它列出了所有路由及其支持的方法和参数,因此无需在外部记录所有这些内容。当我们对不同的资源执行CRUD操作时,我们将引用这个响应对象。

查看了探索 API 的选项后,现在让我们开始使用 WP REST API 从服务器检索数据。

处理帖子

到目前为止,我们已经熟悉了 OPTIONS 请求,这是一种评估 API 可用性的自记录方式。我们还研究了它如何显示给定路由支持的方法和参数。利用这些知识,我们现在准备使用 WP REST API 从服务器检索不同的资源。

我们将从 <em>posts</em> 资源开始,因为它是 WordPress 的主要构建块。我们将使用不同的标准来检索帖子。通过应用这些知识,您将能够使用 WP REST API 查询帖子,就像使用 WP_Query 类一样。

在本系列中,我们一直在使用 <em>posts</em> 资源来演示示例请求及其响应,并且我们已经知道如何通过 ID 检索帖子集合和单个帖子。所以我们不会再讨论这个了。相反,我们将研究一些使用顶级参数检索帖子的更高级方法。

使用顶级参数

WP REST API 直接在 GET 端点上公开一些最常用的帖子查询变量。这些参数是:

특정 슬러그가 있는 게시물로 결과를 제한하세요. 특정 상태의 게시물 수집을 제한하는 데 사용됩니다. 여러 분류 간의 관계를 기반으로 결과 집합을 제한하는 데 사용됩니다. 카테고리 분류에 할당된 용어를 기준으로 결과 집합을 필터링합니다. 카테고리 분류에 지정된 특정 용어를 제외한 항목으로 결과 집합을 필터링합니다. 태그 분류에 지정된 용어로 결과 집합을 필터링합니다. 태그 분류에 지정된 특정 용어를 제외한 항목으로 결과 집합을 필터링합니다. 결과 집합을 고정 항목으로 제한하는 데 사용됩니다.
매개변수 의미
context 요청한 범위. 가능한 값은 viewembededit。默认为view일 수 있습니다.
page 글 모음의 현재 페이지입니다. 기본값은 1입니다.
per_page 페이지당 총 게시물 수. 기본값은 10입니다.
搜索 검색어. 일치하는 문자열로 결과를 제한합니다.
after 이 매개변수에 지정된 날짜 이후에 게시된 게시물만 반환합니다.
modified_after 이 매개변수에 지정된 날짜 이후에 수정된 게시물만 반환합니다.
作者 저자 ID. 결과를 특정 작성자로 제한하는 데 사용됩니다.
author_exclude 결과 집합에는 특정 작성자에게 할당된 게시물이 포함되지 않습니다.
이 매개변수에 지정된 날짜 이전에 게시된 게시물만 반환합니다.
modified_before 이 매개변수에 지정된 날짜 이전에 수정된 게시물만 반환합니다.
排除 검색 결과에서 제외할 게시물 ID 배열입니다.
include 이 배열에 지정된 게시물 ID로 결과를 제한합니다.
offset 지정된 숫자로 검색 결과를 오프셋합니다.
order 수집순서. ascdesc일 수 있습니다.
orderby 컬렉션 속성 정렬. 가능한 값은 author, date, id, include, modified, parent, relevance, slug include_slugstitle일 수 있습니다.
search_columns 검색할 열 이름의 배열을 지정할 수 있습니다.
<code class="inline"><strong>slug</strong>슬러그
status
tax_relation
类别
categories_exclude
<strong>标签</strong></td>tag<td>
tags_exclude
sticky
🎜 🎜

context 参数用于根据我们正在工作的范围获取帖子。如果我们只是在索引页面上列出帖子,那么我们可以使用 view 上下文。但是,如果我们要检索帖子以进行编辑,则需要使用 edit 上下文:

$GET /wp/v2/posts?context=edit
로그인 후 복사

edit 上下文参数在 titlecontentraw 字段="inline">摘录。这个 raw 字段的值可以在编辑器中回显出来,用于编辑内容。

获取数据的WP REST API

使用 edit 上下文需要您作为具有 edit_posts 权限的用户进行身份验证。

使用 embed 作为 context 参数的值可获取帖子的集合及其属性的最小子集。

上面提到的其他参数非常不言自明,您可以在 HTTP 客户端中使用它们。

这些是允许您根据特定条件查询帖子的基本参数。

如何使用其他条件过滤记录

除了使用一些基本的顶级参数检索帖子集合之外,WP REST API 还允许您按各种其他条件过滤记录。通过使用此语法,我们可以像使用 WP_Query() 类一样查询帖子。

分页参数是所有过滤器中最重要的,因为它们在帖子列表页面上广泛使用。分页参数允许我们在每页显示特定数量的帖子,并导航到包含帖子的特定数量的页面。

默认情况下,GET 请求会检索每页 10 个帖子的集合。让我们看看如何提交 GET 请求来检索每页仅五个帖子:

$GET /wp/v2/posts?per_page=5
로그인 후 복사

上述请求使用 per_page 变量,如果您使用过 WP_Query(),您可能会熟悉该变量。

page 参数与 per_page 参数结合使用,用于导航到特定数量的页面。每页检索到五个帖子后,我们将发出以下请求以导航到第二页:

$GET /wp/v2/posts?per_page=5&page=2
로그인 후 복사

在使用 WP REST API 在列表页面上构建分页时,per_pagepage 过滤器非常方便。

除了上述请求返回的帖子集合之外,服务器还返回许多标头以及包含有用信息的响应,包括帖子总数和页数。这些值包含在 X-WP-TotalPagesX-WP-Total 响应标头中。

获取数据的WP REST API

使用 WP REST API 创建分页时,X-WP-TotalPagesX-WP-Total 响应标头非常有用,因为它们列出了页面总数以及帖子总数。

除了分页过滤器之外,您还可以按日期过滤帖子。

因此,如果我们要查找日期为 2015-10-15(yyyy/mm/dd)发布的帖子,可以通过以下查询来实现:

$ GET /wp/v2/posts?modified_after=2015-10-14&modified_before=2015-10-16
로그인 후 복사

我们已经在本教程的上一节中了解了如何使用 categories 参数获取属于特定类别或多个类别的帖子。让我们看看如何显示属于 id 为 5 和 6 的类别的帖子:

$ GET /wp/v2/posts?categories=5,6
로그인 후 복사

上述请求将检索属于 ID 为 5 和 6 的类别的所有帖子的列表。

通过以下方式使用 categories_exclude 参数可以达到相反的效果:

$ GET /wp/v2/posts?categories_exclude=5,6
로그인 후 복사

这将检索帖子列表,同时排除属于 ID 为 5 或 6 的类别的所有帖子。

现在我们已经在 WP REST API 的帮助下查看了查询帖子时的不同选项,我们准备进一步推进我们的旅程并查看 WP REST API 支持的一些其他资源。

使用帖子修订、类别和标签

帖子修订提供了一种查看和恢复对帖子所做编辑的方法。 WP REST API 提供了一种通过查询 /posts/<id>/revisions 端点来查看帖子的所有修订版本的方法。因此,对于 ID 为 10 的给定帖子,可以通过发送以下请求来检索所有修订:

$ GET /wp/v2/posts/10/revisions
로그인 후 복사

上述请求将返回一个包含修订对象的数组。修订对象包含在发布对象中找到的属性的子集。下面是 Postman 中的修订对象示例:

获取数据的WP REST API

只要我们知道其 ID,就可以检索特定的修订版本。因此,可以通过以下对象检索 ID 为 10 的帖子上 ID 为 2 的修订:

$ GET /wp/v2/posts/10/revisions/2
로그인 후 복사

上述请求将返回单个修订对象。

除了帖子修订之外,还可以通过以下请求检索特定帖子的类别:

$ GET /wp/v2/categories?post=<post_id>
로그인 후 복사

对于标签,我们使用以下请求,其中 <post_id> 是帖子的 ID:

$ GET /wp/v2/tags?post=<post_id>
로그인 후 복사

如果我们需要检索 ID 为 10 的帖子的帖子元数据,我们将以经过身份验证的用户身份发送以下请求:

$ GET /wp/v2/posts/10/meta
로그인 후 복사

这将返回一个元对象数组。

请注意,要在 WP REST API 中使用帖子和页面元,您需要安装配套插件,该插件可从 WP REST API 团队在 GitHub 上获取。

使用其他资源

到目前为止,我们已经为使用 WP REST API 检索数据奠定了相当坚实的基础。我们已经研究了选项请求以及它如何帮助我们在不需要外部文档的情况下探索 API。

您始终可以向特定资源发送 OPTIONS 请求,并检查它支持哪些端点和参数。如果您需要列出 WP REST API 提供的所有路由,您可以向 /wp-json 处的索引端点发送 GET 请求,正如我们在本教程的开始。

考虑到自我文档的优势,我认为我们不需要进一步探索本教程中的每个单独资源,因为您现在可以自己完成此操作。

接下来会发生什么?

在这个冗长的教程中,我们学习了使用 OPTIONS 请求探索 API 并使用 WP REST API 从服务器检索数据。我们只查看了一些资源,包括帖子、修订后和帖子元,因为我们无法仅在一个教程中涵盖所有支持的资源。但您现在应该能够使用我们在本教程中介绍的技术自行探索 API。

WordPress 的经济非常活跃。有主题、插件、库和许多其他产品可以帮助您构建网站和项目。该平台的开源性质也使其成为提高编程技能的绝佳选择。

在本系列的下一部分中,我们将学习执行 CRUD 的其他三个操作,即创建、更新和删除资源。所以请继续关注。

위 내용은 데이터를 가져오는 WP REST API의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿