kuliebiakin/simple-rest-api

简单的 WordPress REST API 路由器

2.0.1 2023-01-04 16:08 UTC

This package is auto-updated.

Last update: 2024-09-04 19:48:44 UTC


README

WordPress REST API 路由器,使用非常简单。

安装

Composer

$ composer require shtrihstr/simple-rest-api

旧方法

发布部分 下载存档

require_once '/path/to/Route.php';
require_once '/path/to/Router.php';

用法

创建一个路由器

$router = new Simple_REST_API\Router( 'my-plugin/v1.0', [ 'etag' => true ] );

示例 GET 路由

下面是一个 GET 路由的示例定义

$router->get( '/posts', function() {
    return get_posts();
} );

动态路由

现在你可以创建另一个控制器来查看单个博客文章

$router->get( '/post/{id}', function( WP_REST_Response $response, $id ) {
    $post = get_post( $id );
    if( ! $post ) {
        $response->set_status( 404 );
    }
    else {
        $response->set_data( $post );
    }
    return $response;
} );

示例 POST 路由

POST 路由表示资源的创建。例如,这是一个反馈表单。

$router->post( '/feedback', function( WP_REST_Request $request, WP_REST_Response $response ) {
    $body_params = $request->get_body_params();
    $message = esc_html( $body_params['message'] );
    
    wp_mail( 'feedback@yoursite.com', '[YourSite] Feedback', $message );

    $response->set_status( 201 );
    $response->set_data( 'Thank you for your feedback!' );
    return $response;
} );

其他方法

你可以为大多数 HTTP 方法创建控制器。

$router->put( '/post/{id}', function( $id ) {
    // ...
} );

$router->delete( '/post/{id}', function( $id ) {
    // ...
} );

$router->patch( '/post/{id}', function( $id ) {
    // ...
} );

路由变量

如前所述,你可以在路由中定义变量部分,如下所示

$router->get( '/post/{id}', function( $id ) {
    // ...
} );

也可以有多个变量部分,只需确保闭包参数与变量部分的名称匹配即可

$router->get( '/post/{post_id}/paged/{page_id}', function( $post_id, $page_id ) {
    // ...
} );

虽然不推荐,但你也可以这样做(注意参数的切换)

$router->get( '/post/{post_id}/paged/{page_id}', function( $page_id, $post_id ) {
    // ...
} );

你还可以请求当前请求和响应对象

$router->get( '/post/{id}', function( WP_REST_Request $request, WP_REST_Response $response, $id ) {
    // ...
} );

路由变量转换器

在将路由变量注入控制器之前,你可以应用一些转换器

$router->get( '/post/{id}', function( $id ) {
    // ...
} )->convert( 'id', function( $id ) { return (int) $id; } );

当你想将路由变量转换为对象时非常有用

$router->get( '/comments/{user}', function( $user ) {
    // ...
} )->convert( 'user', function( $user ) { return get_user_by( 'id', $user ); } );

要求

以下将确保 id 参数是一个正整数,因为 \d+ 匹配任何数量的数字

$router->get( '/post/{id}', function( $id ) {
    // ...
} )->assert( 'id', '\d+' );

中间件

路由中间件添加到路由中,并且仅在匹配相应路由时触发。你还可以堆叠它们

$before_callback = function() {
    $GLOBALS['wpdb']->queries = [];
};

$after_callback = function( WP_REST_Response $response ) {
    $data = $response->get_data();
    if( is_array( $data ) ) {
        $data['debug'] = [
            'time' => timer_stop(),
            'queries' => $GLOBALS['wpdb']->queries,
        ];
        $response->set_data( $data );
    }
};

$router->get( '/post/{id}', function( $id ) {
    // ...
} )->before( $before_callback )->after( $after_callback );