API customizada no WordPress

Olá, hoje vamos ver aqui como construir uma API customizada no WordPresss, de forma simples e correta, evitando os erros mais comuns ao se fazer tal trabalho.

Introdução com uma história triste

Um vez fiz uma API customizada no WordPress para que meu frontend feito com DIVI Theme, para que ele pudesse ler os dados enviados por esta API, que por sua vez consultava diversos outros recursos externos, tais como outras APIs externas.

Normalmente todos os temas WordPress têm um arquivo functions.php, no caso do DIVI o functions.php fica em /wp-content/themes/Divi/functions.php. Este arquivo é fundamental para adicionar funcionalidade personalizada ao tema, e foi lá que coloquei minhas customizações, acrescidas nas últimas linhas.

O problema é que este arquivo é todo sobreescrito a cada nova versão lançada daquele tema pelo desenvolvedor do tema, apagando assim também qualquer customização feita por você ali. 

Foi isso que aconteceu comigo, e a dica para que isso não ocorra contigo, eu vou deixar aqui neste artigo, que é colocar o seu código em um plugin personalizado, o que inclusive vai deixar a solucão mais segura e elegante!

Mãos à massa

Vamos começar criando um plugin personalizado. Para isso adicione um arquivo em: 

/wp-content/plugins/custom-api/custom-api.php

Você pode renomear o nome do diretório e arquivo para ficar de acordo com sua criação.

Feito isso, insira este código no arquivo:

<?php

/*

Plugin Name: Custom API Modifications

Description: Custom APIs and endpoints

Author: Name

Version: 1.0

*/

add_action('rest_api_init', function () {

    register_rest_route('minhaapi/v1', '/teste/', [

        'methods'  => 'GET',

        'callback' => 'minha_funcao_personalizada',

    ]);

});

function minha_funcao_personalizada() {

    return ['mensagem' => 'Funcionando!'];

}

Mais opções de valores para o header estão aqui

Agora, quando você for a área de plugins do seu WordPress verá o seu plugin lá, ative-o, e faça uma chamada no browser para https://seusite.com/wp-json/minhaapi/v1/teste

O retorno será: Funcionando!
Pronto, você já tem um ponto em seu WordPress, pronto para se comunicar com o frontend e com recursos externos, de forma segura e organizada.
Abaixo um exemplo completo de uma requisição usando o método POST, ele faz uma requisição a uma API externa, entregando os dados no backend do WordPress. Isso é útil para interligar o backend do seu WordPress a um serviço externo, e então ter os dados de retorno disponíveis para trabalhar no backend ou frontend do seu website.

/*--------------------------------------

 Registra o endpoint consulta cliente 

--------------------------------------*/

function consulta_cliente(WP_REST_Request $request)

{

  $api_url = 'https://api.exemplo.com';

  $required_params = ['valor', 'tipo'];

  // Verifica se algum parâmetro obrigatório está ausente

  foreach ($required_params as $param) {

    if (!isset($request[$param])) {

      return new WP_REST_Response([

        'message' => 'parâmetro [' . $param . '] não fornecido.'

      ], 400);

    }

  }

  $valor = $request->get_param('valor');

  $tipo = $request->get_param('tipo');

  // Faz a requisição para a API externa

  $response = wp_remote_post($api_url, [

    'headers' => [

      'Content-Type' => 'application/json',

    ],

    'sslverify' => false,

    'body' => json_encode([

      'valor' => $valor,

      'tipo' => $tipo

    ]),

  ]);

  if (is_wp_error($response)) {

    return new WP_REST_Response([

      'message' => 'Erro ao se conectar com a API externa.',

      'error' => $response->get_error_message(),

    ], 500);

  }

  $http_code = wp_remote_retrieve_response_code($response);

  $body = wp_remote_retrieve_body($response);

  $data = json_decode($body, true);

  return new WP_REST_Response($data, $http_code);

}

// Registra o endpoint na API REST

add_action('rest_api_init', function () {

  register_rest_route('minhaapi/v1', '/cliente', [

    'methods' => 'POST',

    'callback' => 'consulta_cliente',

    'permission_callback' => '__return_true', // Permitir requisição sem autenticação

  ]);

});

Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *