iis服务器助手广告广告
返回顶部
首页 > 资讯 > CMS >Wordpress教程(一) Rest Api简单入门
  • 823
分享到

Wordpress教程(一) Rest Api简单入门

php 2023-09-04 19:09:50 823人浏览 独家记忆
摘要

Wordpress是当今最强大的博客+cms系统,最近在用Wordpress给客户搭建一款小程序,涉及到Rest api,于是有了本篇,本篇根据官方文档和个人的理解编写,如有错误或者疏漏,请同学指

Wordpress是当今最强大的博客+cms系统,最近在用Wordpress给客户搭建一款小程序,涉及到Rest api,于是有了本篇,本篇根据官方文档和个人的理解编写,如有错误或者疏漏,请同学指正

全局参数

通过全局参数的设置,能够使接口具备一些GraphQl的能力

_fields

作用:过滤字段
使用形式:
/wp/v2/posts?_fields=author,id,excerpt,title,link
或者
/wp/v2/posts?_fields[]=author&_fields[]=id&_fields[]=excerpt&_fields[]=title&_fields[]=link
另外,支持嵌套
?_fields=article.author,article.cat.cat_name
表示返回访问文章的作者和文章的分类的分类名

_embed

作用:大多数资源包括相关资源的链接。例如,一个帖子可以链接到父帖子,或者链接到帖子的评论。为了减少Http请求的数量,客户可能希望获取一个资源以及链接的资源。_embed参数向服务器表明,响应应该包括这些嵌入资源。
用法:/wp/v2/posts?_embed=author,wp:term
表示表示除了读取文章外,还嵌入作者和相关连接

_method

和大部分rest规范一些,用来表示请求方式,wordpress支持参数的形式,当然,wordpress也支持附加在header的形式
使用

POST /wp-JSON/wp/v2/posts/42 HTTP/1.1Host: example.comX-HTTP-Method-Override: DELETE

_envelope

调试模式:与_method类似,一些服务器、客户端和代理不支持访问完整的响应数据。该API支持传递一个_envelope参数,调试模式下请求将返回更详细的信息,包括头文件和状态码

    "status": 200,    "headers": {        "Allow": "GET"    }

_jsonp

使API原生支持JSONP响应,允许传统浏览器和客户端的跨域请求。这个参数需要一个javascript回调函数,它将被预置到数据中。然后这个URL可以通过

page,per_page,offset

对于一些接口,用来表示分页

order,orderby

用来排序

Authentication认证

X-WP-Nonce

这种认证方法依赖于WordPress cookies。因此,这种方法只适用于在WordPress内部使用REST API并且当前用户已经登录的情况下。此外,当前用户必须有适当的能力来执行正在进行的操作,老俊理解为这里的nonce相当于我们开发表单提交时常会在表单里面置入token一样
如何使用?
先利用wp_create_nonce函数生成nonce,

<?PHPwp_localize_script( 'wp-api', 'wpApiSettings', array(    'root' => esc_url_raw( rest_url() ),    'nonce' => wp_create_nonce( 'wp_rest' )) );

再放入X-WP-Nonce

options.beforeSend = function(xhr) {    xhr.setRequestHeader('X-WP-Nonce', wpApiSettings.nonce);    if (beforeSend) {        return beforeSend.apply(this, arguments);    }};

Basic Authentication

Basic Authentication方式使用了后台的应用程序密码,在后台用户管理那边可以设置。
使用

curl --user "USERNAME:PASSWORD" https://HOSTNAME/wp-json/wp/v2/users?context=edit

然而curl --user其实使用的就是Basic Auth,

This will make curl use the default “Basic” HTTP authentication method. Yes, it is actually called Basic and it is truly basic. To explicitly ask for the basic method, use --basic.
The Basic authentication method sends the user name and password in clear text over the network (base64 encoded) and should be avoided for HTTP transport.
这将使curl使用默认的 "Basic "HTTP认证方法。是的,它实际上被称为Basic,而且是真正的基本。要明确要求使用Basic方法,请使用–basic。
Basic认证方法在网络上以明文形式发送用户名和密码(base64编码),应该避免用于HTTP传输。

通过Curl来使用

<?php$username = 'admin';$application_password = 'MGow EG9V 04xo sUZ0 60wo J2OG'; $url = 'SITE_URL/wp-json/wp/v2/posts';  $json = json_encode([    'title' => 'Post using REST API',    'content' => 'Post content using REST API',    'status' => 'publish',]); try {    $ch = curl_init($url);    curl_setopt($ch, CURLOPT_USERPWD, $username.':'.$application_password);    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);    curl_setopt($ch, CURLOPT_TIMEOUT, 10);    curl_setopt($ch, CURLOPT_POST, 1);    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);    curl_setopt($ch, CURLOPT_POSTFIELDS, $json);    $result = curl_exec($ch);    $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);    curl_close($ch);    print_r(json_decode($result));} catch(Exception $e) {    echo $e->getMessage();}

通过Guzzle来使用

<?phprequire_once "vendor/autoload.php";  use GuzzleHttp\Client; $username = 'admin';$application_password = 'MGOw EG9V 04xo sUZ0 60wo J2OG'; try {    $client = new Client([        // Base URI is used with relative requests        'base_uri' => 'SITE_URL',    ]);         $response = $client->request('POST', '/wp-json/wp/v2/posts', [        'json' => [            'title' => 'Post using REST API',            'content' => 'Post content using REST API',            'status' => 'publish',        ],        "headers" => [            "Authorization" => "Basic ". base64_encode($username.':'.$application_password)        ],    ]);     $body = $response->getBody();    $arr_body = json_decode($body);    print_r($arr_body);} catch(Exception $e) {    echo $e->getMessage();}

通过Wordpress插件来实现

可以使用Jwt Authentication for WP REST API这款插件来实现jwt token认证,也可以搜索别的插件,wordpress社区提供了非常多的插件

客户端库的使用

1、在wordpress内部注册wp-api脚本

wp_enqueue_script( 'wp-api' );//或wp_enqueue_script( 'my_script', 'path/to/my/script', array( 'wp-api' ) );

脚本路径wp-includes/js/wp-api.js,脚本基于backbone.js
使用方法

// Create a new postvar post = new wp.api.models.Post( { title: 'This is a test post' } );post.save();// Load an existing postvar post = new wp.api.models.Post( { id: 1 } );post.fetch();

2、node-wpapi

可以用于node.js端和javascript客户端
安装和使用

npm install --save wpapivar WPAPI = require( 'wpapi' );var wp = new WPAPI({ endpoint: 'http://src.wordpress-develop.dev/wp-json' });// Callbackswp.posts().get(function( err, data ) {    if ( err ) {        // handle err    }    // do something with the returned posts});// Promiseswp.posts().then(function( data ) {    // do something with the returned posts}).catch(function( err ) {    // handle error});

常用的Rest Api

根网址:https:/域名/wp-json。

资源路由
块类型相关/wp/v2/block-types
文章分类相关/wp/v2/categories
文章评论相关/wp/v2/comments
媒体文件相关/wp/v2/media
文章列表相关/wp/v2/pages
文章内容相关/wp/v2/posts
标签/wp/v2/tags
用户/wp/v2/users

具体查看:https://developer.wordpress.org/rest-api/reference/

如何扩展Rest Api

修改已有api的响应

使用reGISter_rest_field 或者register_meta ,注册到rest_api_init钩子上
以下举例给comment添加一个myphone字段和mymeta元字段

add_action( 'rest_api_init', function () {    register_rest_field( 'comment', 'myphone', array(        'get_callback' => function( $comment_arr ) {            $comment_obj = get_comment( $comment_arr['id'] );            return (string) $comment_obj->myphone;        },        'update_callback' => function( $myphone, $comment_obj ) {            $ret = wp_update_comment( array(                'comment_ID'    => $comment_obj->comment_ID,                'myphone' => $myphone            ) );            if ( false === $ret ) {                return new WP_Error(                  'rest_comment_karma_failed',                  __( 'Failed to update comment karma.' ),                  array( 'status' => 500 )                );            }            return true;        },        'schema' => array(            'description' => '我的电话',            'type'        => 'text'        ),    ) );} );

添加新的api

使用register_rest_route函数,可以添加api路由,register_rest_route必须放置在rest_api_init 钩子中,register_rest_route的定义如下:

register_rest_route( string $namespace, string $route, array $args = array(), bool $override = false ): bool

函数接收4个参数, n a m e s p a c e 表示路由空间, namespace表示路由空间, namespace表示路由空间,route为路由路径,如果 namespace = ′ laojun/v 1 ′ , namespace='laojun/v1', namespace=laojun/v1,route=‘route’,那么完整的api地址就是http://域名/wp-json/laojun/v1/route
$arg参数是一个数组,比较复杂,api的请求方法、路由回调、路由验证,路由权限等功能都定义在这里。如

        add_action( 'rest_api_init', function() {            register_rest_route( 'laojun/v1', '/route/', array(                'methods' => 'POST',                'callback' =>  'plugin_name_route_api',                'args' => array(                  'id' => array(                    'validate_callback' => function($param, $request, $key) {                    return is_numeric( $param );                    }                  ),                ),  'permission_callback' => function() { return ''; }            ) );        } );

这里定义了请求方法为Post,路由回调plugin_name_route_api表示请求这个路由时会执行plugin_name_route_api这个方法。validate_callback表示在请求前会验证请求参数id是否为数字,permission_callback表示请求权限验证。

来源地址:https://blog.csdn.net/yang45310/article/details/130095196

--结束END--

本文标题: Wordpress教程(一) Rest Api简单入门

本文链接: https://www.lsjlt.com/news/394214.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Wordpress教程(一) Rest Api简单入门
    Wordpress是当今最强大的博客+cms系统,最近在用wordpress给客户搭建一款小程序,涉及到Rest Api,于是有了本篇,本篇根据官方文档和个人的理解编写,如有错误或者疏漏,请同学指...
    99+
    2023-09-04
    php
  • Python入门教程(一)Python简单介绍
    目录什么是 Python?Python 可以做什么?Python可以做:为何选择 Python?Python 语法与其他编程语言比较关于偏见什么是 Python? 自20世纪90年代...
    99+
    2023-05-14
    Python入门 Python介绍
  • python Tkinter的简单入门教程
    目录设计代码逐步解释我们将编写一个英尺和米的转换程序,通过这个程序,我们将会了解一个真正的实用程序该怎么设计和编写,我们也将会了解到 Tk 程序内部的基本样子。不必完全掌握里面的所有...
    99+
    2024-04-02
  • Python API教程:API入门
    什么是API? 一个API,或被称为应用程序接口,是一个服务器为你提供一个接收或发送数据的代码。API通常用来接收数据。 本文就集中焦点在此话题中。 当我们想从一个API中接收数据,我们需要开始请求。...
    99+
    2023-09-07
    python 开发语言
  • WordPress入门指南:简单易懂的介绍
    随着互联网的不断发展,搭建个人博客或企业网站已经变得越来越简便易行。而在众多网站搭建工具中,WordPress作为一个内容管理系统,备受青睐。本文将为大家提供一个WordPress入门...
    99+
    2024-02-29
    指南 入门
  • Mybatis结果集映射一对多简单入门教程
    Mybatis 一对多 简单入门 易懂 搭建数据库环境 student 表 DROP TABLE IF EXISTS `student_2`; CREATE TABLE ...
    99+
    2024-04-02
  • Node.js 单元测试入门:Chai 的简单教程
    在 Node.js 中进行单元测试时,Chai 是一个非常受欢迎的断言库。它提供了丰富的断言方法,可以帮助我们轻松地验证测试结果。本文将介绍 Chai 的基本用法,并通过一些示例演示如何使用 Chai 进行单元测试。 安装 Chai 首先...
    99+
    2024-02-12
    Node.js 单元测试 Chai
  • MyBatis入门实例教程之创建一个简单的程序
    准备: (1) IDEA 2021 (2)Java 1.8 (3)数据库 MySQL 5.7 (SQLyog 或 Navicat) 在 MySQL 中创建数据库 mybatisdem...
    99+
    2024-04-02
  • python对RabbitMQ的简单入门使用教程
    目录(一)RabbitMQ的简介(二)RabbitMQ的安装(三)python操作RabbitMQ(四)RabbitMQ简单模式(五)RabbitMQ发布订阅模式(六)RabbitM...
    99+
    2024-04-02
  • python入门教程(一)
      我们依然不讲代码,而是先说命令行。   为什么命令行如此重要?之前说到,命令行是你和电脑对话的地方。你可以用句子的方式把信息发给电脑,电脑再以句子的方式给你回应。在编程领域,有些消息只能用命令行告诉电脑——或许是编程人员早就习惯了,或许...
    99+
    2023-01-31
    入门教程 python
  • Java搭建简单Netty开发环境入门教程
    下面就是准备Netty的jar包了,如果你会maven的话自然是使用maven最为方便了。只需要在pom文件中导入以下几行 <!-- https://mvnreposi...
    99+
    2024-04-02
  • Android基础入门之dataBinding的简单使用教程
    目录前言1.前期准备1.1打开dataBinding1.2修改布局文件1.3修改Activity方法2.DataBinding的使用2.1属性更新2.2<data>标签2...
    99+
    2024-04-02
  • 【业务工具】MobaXterm入门介绍和简单教程
    本文主要整理自: zhihu:MobaXterm详细使用教程系列一 (作者Gang Tang) 文章目录 前言1 SSH是什么?1.1 SSH客户端1.2 SSH1.3 常用SSH客户端...
    99+
    2023-10-11
    linux ssh
  • ZooKeeper入门教程一简介与核心概念
    目录1、ZooKeeper介绍与核心概念1.1 简介1.2分布式系统面临的问题1、通过网络进行信息共享2、通过共享存储1.3 ZooKeeper如何解决分布式系统面临的问题1.4 z...
    99+
    2024-04-02
  • 二维码编程:Python API入门教程
    二维码(QR Code)是一种被广泛应用于商品条形码、门票、电子支付等领域的二维码技术。Python作为一种高效、易学易用的编程语言,自然也提供了相应的API来处理二维码。本篇文章将为大家介绍Python中二维码编程的基础知识和使用方法。...
    99+
    2023-09-18
    二维码 编程算法 api
  • Room Kotlin API的使用入门教程
    目录定义数据库表访问表中的数据插入数据查询数据创建数据库测试 DaoRoom 是 SQLite 的封装,它使 Android 对数据库的操作变得非常简单,也是迄今为止我最喜欢的 Je...
    99+
    2024-04-02
  • 制作微信小程序的小白简单入门教程
    目录一、小程序是什么?二、小程序的优势三、知识准备四、开发准备五、 hello world 示例六、WXML 标签语言七、小程序的项目结构八、项目配置文件 app.json小程序已经...
    99+
    2022-12-03
    微信小程序入门教程 微信小程序教程
  • python编程之API入门: (一)使
    在网络编程中,我们会和API打交道。那么,什么是API如何使用API呢?本文分享了一下我对API的理解以及百度地图API的使用。 API是"Application Programming Interface(应用程序编程接口)"的缩写。如...
    99+
    2023-01-31
    入门 python API
  • Go语言七篇入门教程一简介初识
    目录简介为什么是GoGo应用WebCloud 云BlockChain 区块链如何学习Go其实我自己接触Go语言也还不到一年,20年的10月我才开始学Go的。 我自己也并不是很懂,但是...
    99+
    2024-04-02
  • python入门之一个简单记事本
    最近在练习一个关于python项目的列表,拿到列表看到这是要实现一个记事本功能,刚开始拿到题目真有点懵。虽然用python实现excel的处理已经很熟悉了,且已经把python的知识点都学了一遍,但是用起来还是不顺手呐。尤其是试验之后发现...
    99+
    2023-01-31
    入门 记事本 简单
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作