WordPress REST API

criando rotas específicas para o seu projeto

Marcelo Villela Gusmão

marcelovillelagusmao@gmail.com

API

Application Programming Interface (Interface de Programação de Aplicações)

 

Conjunto de regras que permite com que programas
(ou partes de um mesmo programa) conversem entre si sem que seja necessário conhecer profundamente o funcionamento de cada um deles.

WordPress API​s

Conjunto composto por grupos de funções responsáveis por um conjunto específico de funcionalidades.

Options API

Widget API

Shortcode API

Theme Customization API

e mais...

function customize_register($wp_customize) {
    $wp_customize->add_section('mvg_contact_info', array(
        'title' => 'Informações de contato',
        'priority' => 120,
    ));
}
add_action('customize_register', 'customize_register');

REST API​

Representational State Transfer (Transferência de Estado Representacional) é uma abstração da arquitetura da World Wide Web e utiliza principalmente o sistema de requisição e resposta através dos verbos HTTP.

Verbos HTTP:

GET

POST

PUT

DELETE

Códigos HTTP:

200

300

400

500

Rotas e endpoints

https://dominio.com.br/wp-json/wp/v2/posts

domínio

base

rota

GET | lista todos os posts

verbo

endpoint

POST | cria um novo post

verbo

endpoint

Endpoints são funções disponíveis através da API REST.

 

Rotas são os nomes para se acessar essas funções.

Rotas e endpoints

O problema

Criando rotas GET

https://developer.wordpress.org/rest-api/extending-the-rest-api/adding-custom-endpoints/

GET | https://dominio.com.br/wp-json/associados/checar/

namespace

add_action( 'rest_api_init', function () {
    register_rest_route( 'associados', '/checar/(?P<id>\d+)', array(
        'methods' => 'GET',
	'callback' => 'check_user_status',
	...
    });
});

function check_user_status($data){
    $user_id = $data['id'];
    $status = get_user_meta($user_id, 'user_active', true);
    return array( 'message' => $status );
}

Criando rotas POST

POST | https://dominio.com.br/wp-json/associados/ativar/

register_rest_route( 'associados', '/ativar/(?P<id>\d+)', array(
    'methods' => 'POST',
    'permission_callback' => 'check_token',
    'callback' => 'activate_user',
    ...
));

function check_token($request){
    $token = '';
    $request_token = $request->get_header('token');
	
    if($token !== $request_token){
	return new WP_Error( 'rest_forbidden', 'token inválido', array( 'status' => 401 ) );
    }
    
    return true;
}

function activate_user($request){
    $body = $request->get_body_params();
    $subscription = $body['subscription'];
    $user_id = $request['id'];
    
    update_user_meta( $user_id, 'user_active', 1, 0 );
    update_user_meta( $user_id, 'subscription_number', $subscription );

    return array( 'message' => 'OK' );
}

Validando a resposta

register_rest_route( 'associados', '/ativar/(?P<id>\d+)', array(
    'methods' => 'POST',
    'permission_callback' => 'check_token',
    'callback' => 'activate_user',
    'args' => array(
        'subscription' => array(
            'required' => true,
            'validate_callback' => function($param, $request, $key) {
                return is_numeric( $request['subscription'] );
            }
	),
    ),
    
));

Links

Made with Slides.com