WordPress REST API implementation examples | Hoverify

WordPress REST API 实现示例

WordPress REST API 将 WordPress 转变为构建自定义 Web 解决方案的强大平台。以下是您需要了解的内容:

  • 2016 年添加到 WordPress 核心
  • 允许 WordPress 使用 JSON 与其他应用程序通信
  • 提供以编程方式访问 WordPress 数据的标准方法
  • 无需 PHP 或 WordPress 后端即可处理文章、页面、媒体等

主要优点:

  • 使用 ReactVue.js 构建无头 WordPress 应用程序
  • 使用 WordPress 数据创建原生移动应用程序
  • 将 WordPress 连接到 MailChimpHubSpot 等服务
  • 开发自定义插件和工具以扩展 WordPress

本指南涵盖:

  1. WordPress REST API 基础知识
  2. 简单的 API 示例
  3. 创建自定义 API 终端节点
  4. 高级 API 用法
  5. 与其他工具和服务集成

无论您是 WordPress 开发人员还是企业主,了解 REST API 都为创建灵活、高效的 Web 应用程序开辟了新的可能性。

WordPress (英文)REST API 基础知识

WordPress (英文)

WordPress REST API 为开发人员带来了翻天覆地的变化。自 2016 年以来,它一直是 WordPress 核心的一部分,现在是现代 WordPress 开发的首选方法。

API 的工作原理

将 REST API 视为 WordPress 和其他应用程序之间的翻译器。它使用 HTTP 请求和 JSON 响应来完成工作。当应用程序向您的 WordPress 网站请求某些内容时,API 会立即采取行动。它从 WordPress 数据库中获取数据并将其发回。

“如果您想要一种结构化、可扩展且简单的方法来进出 WordPress 的数据,您可能希望使用 REST API。”- WordPress API 文档

登录方式

您有三个主要的登录选项:

  1. 基本身份验证

有利于开发,但不是特别安全。始终使用 HTTPS 进行此作。

  1. OAuth

这是生产的最佳选择。这是最安全的选择。

  1. 应用程序密码

一个非常可靠的新选项。您正在使用的每个应用程序都会获得一个 24 个字符的密钥。

请求的工作原理

API 使用四种主要的 HTTP 方法:

  • GET:抓取现有内容
  • POST:制作新东西
  • PUT:更新现有内容
  • DELETE:删除内容

想要获取您发布的所有帖子?方法如下:

GET http://yourdomain.com/wp-json/wp/v2/posts

主要 API 端点

以下是您最常使用的终端节点:

  1. /wp/v2/帖子

这是为了管理帖子。使用它来获取博客文章。

  1. /wp/v2/页面

这将处理页面。这是您获取页面内容的方式。

  1. /wp/v2/媒体

这适用于您的媒体库。使用它来上传图像。

  1. /wp/v2/用户

这将管理用户。这是您获取作者信息的方式。

WordPress.com admin dashboard (Calypso) 是 API 的一个很好的示例。它是一个完全在 API 调用上运行的单页应用程序。

“WordPress REST API 为 WordPress 用户和开发人员带来了一些令人兴奋的挑战,但也是有趣的机会。”- Rachel McCollin,作者

最后一件事:API 通常每页提供 100 个项目。您可以使用 “per_page” 参数将其增加到 500。当您处理大量数据时,这非常有用。

简单的 API 示例

让我们深入了解一些使用 WordPress REST API 的实用方法。这些示例将帮助您开始执行常见任务。

获取帖子和页面

想要获取帖子?这很简单。以下是获取所有已发布文章的方法:

async function getWPPosts() {

    const response = await fetch('https://your-site.com/wp-json/wp/v2/posts');

    const posts = await response.json();

    console.log(posts);

}

需要限制帖子数量或添加分页?没关系:

$response = wp_remote_get('https://your-site.com/wp-json/wp/v2/posts?per_page=10&page=1');

if(200 === wp_remote_retrieve_response_code($response)) {

    $posts = json_decode(wp_remote_retrieve_body($response), true);

}

获取自定义帖子

有自定义帖子类型?您需要为 API 设置它们。方法如下:

add_action('init', 'register_book_post_type');

function register_book_post_type() {

    $args = array(

        'public'       => true,

        'show_in_rest' => true,

        'rest_base'    => 'books',

        'label'        => 'Books'

    );

    register_post_type('book', $args);

}

“REST API 为自定义帖子类型提供了令人兴奋的机会,使开发人员能够构建丰富的界面和应用程序。”- Jetpack 客户体验专家 Jen Swisher

管理类别和标签

分类法的工作方式与 API 中的帖子类似。以下是使自定义分类对 API 友好的方法:

add_action('init', 'register_book_genre_taxonomy');

function register_book_genre_taxonomy() {

    $args = array(

        'hierarchical'          => true,

        'show_in_rest'         => true,

        'rest_base'            => 'genre',

        'rest_controller_class' => 'WP_REST_Terms_Controller',

    );

    register_taxonomy('genre', array('book'), $args);

}

使用图像和文件

通过 API 上传图像?您需要身份验证和正确的标头:

$image_path = '/path/to/image.jpg';

$request_url = 'https://your-site.com/wp-json/wp/v2/media';

$image = file_get_contents($image_path);

$mime_type = mime_content_type($image_path);

$response = wp_remote_post($request_url, array(

    'headers' => array(

        'Authorization' => 'Basic ' . base64_encode("$username:$password"),

        'Content-Type' => $mime_type,

        'Content-Disposition' => 'attachment; filename="' . basename($image_path) . '"'

    ),

    'body' => $image

));

上传后想要更新图片信息?方法如下:

wp_remote_post("$request_url/$image_id", array(

    'headers' => array(

        'Authorization' => 'Basic ' . base64_encode("$username:$password")

    ),

    'body' => array(

        'alt_text' => 'Image description',

        'caption' => 'Image caption'

    )

));

这些示例应该为您提供 WordPress REST API 的良好开端。请记住,熟能生巧!

创建自定义 API 端点

让我们深入了解如何为 WordPress REST API 创建自定义终端节点。这就是事情变得真正有趣的地方。

设置新路由

要创建自定义终端节点,您将使用该函数。以下是它的工作原理:register_rest_route

add_action('rest_api_init', function () {

    register_rest_route('myapp/v1', '/latest-posts/(?Pd+)', array(

        'methods' => 'GET',

        'callback' => 'get_latest_posts_by_category',

        'permission_callback' => function() {

            return current_user_can('edit_posts');

        }

    ));

});

此代码设置一个新路由,用于从特定类别获取最新文章。

“WordPress REST API 的真正价值在于它通过自定义端点的可扩展性。”

编写响应函数

您的回调函数处理请求并发回数据。下面是一个示例:

function get_latest_posts_by_category($request) {

    $args = array('category' => $request['category_id']);

    $posts = get_posts($args);

    if (empty($posts)) {

        return new WP_Error(

            'empty_category',

            'No posts found in this category',

            array('status' => 404)

        );

    }

    $response = new WP_REST_Response($posts);

    $response->set_status(200);

    return $response;

}

此函数从类别中获取帖子并将其发回。如果没有帖子,则返回错误。

检查输入数据

数据验证是 API 安全的关键。WordPress 具有内置方法来帮助:

register_rest_route('myapp/v1', '/custom-data', array(

    'methods' => 'POST',

    'callback' => 'handle_custom_data',

    'args' => array(

        'title' => array(

            'required' => true,

            'validate_callback' => function($value) {

                return !empty($value) && is_string($value);

            },

            'sanitize_callback' => 'sanitize_text_field'

        )

    )

));

此代码检查 'title' 字段是否存在,确保它是一个非空字符串,然后清理它。

设置响应格式

始终如一地构建您的回答是明智的。下面是一个使用 class 的示例:

class Custom_API_Controller {

    public function get_items() {

        $data = array(

            'status' => 'success',

            'data' => array(

                'title' => get_the_title(),

                'content' => get_the_content(),

                'timestamp' => get_the_date('c')

            )

        );

        return rest_ensure_response($data);

    }

}

此类使用状态和一些 post 数据设置响应的格式。

“使用 WP-API,您将有可能将 WordPress 与其他生态系统集成,这使得 WordPress 成为一个强大而现代的应用程序开发平台。”- Ahmed Bouchefra,作者

自定义终端节点允许您根据自己的确切需求定制 WordPress REST API。它们是创建灵活、高效的 Web 应用程序的强大工具。

高级 API 用法

处理错误

WordPress REST API 可能会引发 HTTP 错误,需要仔细处理。常见问题包括:

  • 401 未授权错误(身份验证失败)
  • 403 禁止错误(权限不足)
  • 404 Not Found 错误(缺少资源)

以下是处理 API 端点中错误的方法:

function custom_api_endpoint($request) {

    if (!current_user_can('edit_posts')) {

        return new WP_Error(

            'rest_forbidden',

            'You need edit permissions to access this endpoint',

            array('status' => 403)

        );

    }

    $data = get_posts();

    if (empty($data)) {

        return new WP_Error(

            'no_data',

            'No posts found',

            array('status' => 404)

        );

    }

    return rest_ensure_response($data);

}

使用缓存

默认情况下,REST API 请求不会缓存。这可能会减慢速度。WP REST Cache 插件可以提供帮助。它允许您缓存 API 响应并设置缓存超时。

下面是一个基本的缓存示例:

function get_cached_endpoint($request) {

    $cache_key = 'my_api_cache_' . md5(serialize($request));

    $cached_data = wp_cache_get($cache_key);

    if ($cached_data) {

        return rest_ensure_response($cached_data);

    }

    $data = get_fresh_data();

    wp_cache_set($cache_key, $data, '', 3600); // Cache for 1 hour

    return rest_ensure_response($data);

}

API 安全

保护您的 API 至关重要。以下是您需要做的:

  1. 使用 HTTPS 进行所有 API 通信
  2. 实施 OAuth2 进行用户身份验证和授权
  3. 在数据库中安全地管理 API 密钥

“每个 Web API 都应该使用 TLS(传输层安全性)。TLS 通过在传输过程中加密消息来保护 API 发送的信息(以及用户发送到 API 的信息)。

REST API Toolbox 插件可以帮助实施 SSL 连接和控制 API 访问。需要额外的安全性?禁用 WP REST API 插件可以阻止未登录的用户访问 API。

提高 API 速度

想要加快 API 速度?重点关注以下方面:

add_filter('rest_pre_serve_request', function($served, $result) {

    header('X-WP-Total: ' . $result->headers['X-WP-Total']);

    header('X-WP-TotalPages: ' . $result->headers['X-WP-TotalPages']);

    echo wp_json_encode($result->data);

    return true;

}, 10, 2);

要提高性能,请执行以下作:

  • 使用缓存策略
  • 减少响应有效负载大小
  • 对大数据集使用分页
  • 开启 GZIP 压缩
  • 微调数据库查询

WP REST Cache 插件确实可以加快速度。它会定期更新以修复错误并添加新功能,从而使您的 API 保持高速运行。

与其他工具连接

WordPress REST API 为将 WordPress 与各种工具和平台集成开辟了一个充满可能性的世界。让我们深入了解如何使用它来构建 JavaScript 和移动应用程序、链接其他服务以及使用外部 API。

构建 JavaScript 应用程序

想使用 WordPress 作为后端创建一个活泼的单页应用程序吗?REST API 可以满足您的需求。您可以将其与 React 或 Vue.js 等流行的 JavaScript 框架配对,以构建动态 Web 应用程序。

以下是如何使用 JavaScript 获取帖子的快速示例:

getPosts() {

    return fetch("https://yoursite.com/wp-json/wp/v2/posts")

        .then(response => response.json())

        .then(posts => {

            this.setState({ posts });

        })

        .catch(error => console.error(error));

}

如果您希望加快开发速度,请查看 FrontityFaust 等框架。他们提供专为无头 WordPress 设置设计的预构建组件。

构建移动应用程序

对移动应用程序有个好主意吗?WordPress REST API 可以帮助您将其变为现实。React Native 是使用 WordPress 后端构建移动应用程序的热门选择。

以 Leadership-Quotes 应用程序为例。它使用 REST API 直接从 WordPress 媒体库中提取图像。很酷,对吧?

“WP REST API 允许使用 WordPress 进行如此多的创新。任何人都可以使用他们想要的任何软件构建他们想要的任何东西,并使用 WordPress 作为后端。

但这不仅仅是读取数据。该 API 还支持写入作。例如,Instamobile News Reader 应用程序使用 WordPress REST API 来实现分页和实时内容更新。

链接其他服务

想要将 WordPress 与其他服务连接,但又不想深入研究编码?WPGetAPI 插件可能正是您所需要的。它支持 GET 和 POST 方法,非常适合与以下集成:

  • 电子邮件营销平台
  • 支付网关
  • 社交媒体服务
  • 分析工具

使用其他 API

WordPress REST API 与其他 API 配合良好。开发人员可以创建自定义端点,作为外部 API 的代理,从而实现顺畅的数据交换。

下面简要介绍了不同的 API 如何协同工作:

API 类型 集成方法 常见用例
付款 自定义终端节点 电子商务交易
社交媒体 WP 钩子 内容联合
分析学 REST API 代理 数据可视化
电子邮件服务 自定义路由 时事通讯自动化

WordPress REST API 的美妙之处在于它的灵活性。您可以混合和匹配数据源,同时保持所有集成之间的身份验证和错误处理一致。

总结

WordPress REST API 改变了游戏规则。它使 WordPress 从一个基本的内容管理器变成了构建应用程序的强大工具。自 2016 年成为 WordPress 核心的一部分以来,开发人员和企业一直在使用它来创建更加动态、互联的数字体验。

Google 的 2021 年 API 经济状况报告显示,API 很重要。超过一半的 IT 决策者表示,API 通过腾出时间来处理棘手的事情,帮助他们更快地进行创新。今日美国就是一个很好的例子。他们使用 REST API 自动将内容推送到 Apple News 和 Facebook Instant Articles 等平台。

API 不是一招鲜的小马。查看这些真实示例:

谁在使用它 他们在做什么 为什么很酷
WordPress.com Calypso (管理界面) 更流畅、更快速的管理员体验
Event 浓缩咖啡 活动管理 移动应用程序可以轻松获取数据
我们二 数字代理工作 WordPress 后端, React 前端
今日美国 企业发布 内容无处不在,速度极快

“WordPress REST API 为 WordPress 用户和开发人员带来了新的挑战和机遇。”

想像专业人士一样使用 API 吗?专注于安全性和性能。使用 HTTPS,正确进行身份验证,并保持无状态。该 API 为您提供了一种访问 WordPress 数据的标准方式,因此您可以创建自定义终端节点,与其他服务配合使用,并构建复杂的应用程序,而不会使您的后端变得混乱。

关键是:REST API 允许您将 WordPress 用作无头 CMS。这意味着大企业可以跨不同渠道创建无缝体验,同时保持其应用程序简单。添加所有这些 WordPress 插件,您就拥有了一个非常强大的现代 Web 开发工具。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇