Como construir uma API REST usando PHP

Você está trabalhando com vários dispositivos como iPhone, Android e Web, então dê uma olhada neste post que explica como desenvolver uma API RESTful em PHP. A transferência de estado representacional (REST) é um sistema de software para distribuir os dados para diferentes tipos de aplicações. O sistema de serviço da web produz resposta de código de status no formato JSON ou XML.

#Algoritmos 

O que é API REST?

Algoritmo

REST significa Representational State Transfer e significa que a solicitação e a resposta devem conter uma representação da informação, ou seja, devem estar em um determinado formato. Então, basicamente, as solicitações devem usar métodos HTTP adequados e a resposta deve estar em um formato adequado, como JSON ou XML, em vez de texto simples.

A API REST nada mais é do que uma API normal com um conjunto de princípios. Precisamos seguir um conjunto de regras ao criar e consumir a API REST.

As regras incluem o seguinte.

1. Use métodos HTTP apropriados ao realizar chamadas de API. A seguir estão os quatro métodos HTTP principais que devem ser usados para enviar e receber solicitações de API.

a. GET – Para ler registros únicos ou múltiplos.

b. POST – Para criar um novo registro.

c. PUT – Para atualizar um registro.

d. DELETE – Para excluir um registro.

2. Use a hierarquia de URL adequada em vez de usar a string de consulta de URL para URLs de API.

a. Bom – http://example.com/api/products/1

b. Ruim – http://example.com/api/products.php?id=1

3. Evite usar verbos como nomes de recursos na URL da API e, em vez disso, use substantivos e métodos HTTP adequados.

a. Bom – http://example.com/api/products

b. Ruim – http://example.com/api/products/add

4. Use plurais para os nomes dos recursos na URL da API.

a. Bom – http://example.com/api/products

b. Ruim – http://example.com/api/product

5. Use códigos de resposta HTTP para indicar o status das solicitações.

6. Os dados de resposta devem estar no formato JSON ou XML.

Bibliotecas de cliente HTTP (CURL)

A maioria de vocês já sabe o que é HTTP. HTTP significa Hyper Text Transfer Protocol e é o protocolo que nos permite enviar e receber informações na web. Sempre que fazemos uma solicitação HTTP utilizamos um dos métodos HTTP (GET, POST, PUT, DELETE, etc).

Portanto, para usar APIs REST, precisamos de um cliente que tenha a capacidade de usar todos os métodos HTTP. Infelizmente, o HTML é limitado neste caso. O HTML só pode enviar solicitações GET e POST, o que não é suficiente para usar APIs REST.

Portanto, precisamos de uma biblioteca cliente HTTP e é aí que o cURL entra em vigor. cURL é a biblioteca cliente HTTP mais usada e popular entre os desenvolvedores PHP. Usaremos cURL ao consumir APIs REST. Então veremos isso daqui a pouco.

Construindo uma API REST usando PHP

Vamos construir uma API REST simples em PHP com o que vimos até agora. Considere que você tem um catálogo de produtos online e deseja que seu site e aplicativo móvel compartilhem as mesmas informações sobre os produtos. Então, vamos construir uma API que permita adicionar, atualizar, ler e excluir produtos.

Vamos considerar que example.com é o seu nome de domínio e example.com/api/ é o local da API que iremos construir. Precisamos adicionar um arquivo PHP (products.php) a essa pasta /api/. A tabela a seguir ilustra os URLs e métodos HTTP que devem ser usados para executar ações apropriadas com nossa API.

HTTP Method

URL

Action

GET/api/productsRetrieves all products
GET/api/products/5Retrieves a single product of primary key 5
POST/api/productsAdds a new product
PUT/api/products/3Updates a single product of primary key 3
DELETE/api/products/7Deletes a single product of primary key 7

O arquivo PHP (products.php) é onde colocaremos todo o nosso código API. Observe também que precisamos reescrever a URL para seguir as regras REST. Portanto, adicione um arquivo .htaccess à pasta /api/ e coloque o seguinte nele. Então /api/products.php?product_id=5 se torna /api/products/5.


RewriteEngine On # Turn on the rewriting engine

RewriteRule ^products/?$ products.php [NC,L]

RewriteRule ^products/([0-9]+)/?$ products.php?product_id=$1 [NC,L]


Como a reescrita de URL em si é um tópico importante, não poderemos discuti-lo aqui. Se você estiver interessado em regras de reescrita de URL, recomendo verificar o artigo no URL a seguir.

Verifique aqui: https://www.addedbytes.com/articles/for-beginners/url-rewriting-for-beginners/

Vamos começar colocando o seguinte código para identificar o método de solicitação HTTP.

// Connect to database

$connection=mysqli_connect(‘localhost’,’root’,”,’rest_api’);

$request_method=$_SERVER[“REQUEST_METHOD”];

switch($request_method)

{

case ‘GET’:

// Retrive Products

if(!empty($_GET[“product_id”]))

{

$product_id=intval($_GET[“product_id”]);

get_products($product_id);

}

else

{

get_products();

}

break;

case ‘POST’:

// Insert Product

insert_product();

break;

case ‘PUT’:

// Update Product

$product_id=intval($_GET[“product_id”]);

update_product($product_id);

break;

case ‘DELETE’:

// Delete Product

$product_id=intval($_GET[“product_id”]);

delete_product($product_id);

break;

default:

// Invalid Request Method

header(“HTTP/1.0 405 Method Not Allowed”);

break;

}


Consumindo uma API REST usando PHP

Até agora construímos a API e agora vamos ver como consumi-la. Como disse anteriormente, usaremos cURL aqui para consumir a API. Existem funções integradas para cURL em PHP e a seguir estão as funções que usaremos.

a.Estabelecer uma conexão – curl_init()
b.Adicionar dados de solicitação – curl_setopt()
c.Enviar a solicitação – curl_exec()
d.Feche a conexão – curl_close()

O código a seguir é usado para obter todos os produtos. Passamos o URL da API para a função curl_init() para estabelecer conexão com o servidor e armazenar o identificador de conexão na variável $ch. Aqui, definimos duas opções usando a função curl_setopt(). CURLOPT_HTTPGET é usado para indicar que o método de solicitação HTTP é GET e CURLOPT_RETURNTRANSFER é usado para indicar que a resposta deve retornar o valor em vez de enviá-lo diretamente.

Em seguida, a solicitação é enviada usando a função curl_exec() e armazena a resposta na variável $response_json. Finalmente, fechamos a conexão usando curl_close(). Como a resposta será uma string JSON, precisamos decodificar a string para convertê-la em um array PHP.

$url = ‘http://example.com/api/products’;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPGET, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response_json = curl_exec($ch);
curl_close($ch);
$response=json_decode($response_json, true);

O código a seguir é usado para obter um único produto e é muito semelhante ao código para obter todos os produtos. Estamos passando o valor 5 para recuperar o produto com a chave primária 5.

$url = ‘http://example.com/api/products/5’;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPGET, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response_json = curl_exec($ch);
curl_close($ch);
$response=json_decode($response_json, true);

O código a seguir é usado para adicionar um novo produto. Desta vez adicionamos duas novas opções de cURL. CURLOPT_POST é usado para indicar que o método de solicitação HTTP é POST e CURLOPT_POSTFIELDS é usado para anexar os dados POST.

$dados=array( ‘product_name’ =>’Televisão’, ‘preço’ => 1000, ‘quantidade’ => 10, ‘vendedor’ =>’Comerciantes XYZ’ ); $url = ‘http://example.com/api/products’;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, verdadeiro);
curl_setopt($ch, CURLOPT_POSTFIELDS, $dados);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, verdadeiro);
$response_json = curl_exec($ch);
curl_close($ch);
$response=json_decode($response_json, true);

O código a seguir é usado para atualizar um produto. Usei CURLOPT_CUSTOMREQUEST para indicar que o método de solicitação HTTP é PUT. Como não há uma constante específica para anexar dados PUT usando a função curl_setopt(), estamos usando CURLOPT_POSTFIELDS que usamos na solicitação POST. Mas desta vez não passaremos os dados como um array. Em vez disso, iremos passá-lo como uma string de consulta usando a função http_build_query(). Esta chamada de API atualizará o produto com a chave primária 3.

$data=array( ‘product_name’ =>’Laptop’, ‘price’ => 1200, ‘quantity’ => 15, ‘seller’ =>’ABC Trading Inc.’ ); $url = ‘http://example.com/api/products/3’;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, “PUT”);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response_json = curl_exec($ch);
curl_close($ch);
$response=json_decode($response_json, true);

O código a seguir é usado para excluir um produto. Como você pode ver, usei CURLOPT_CUSTOMREQUEST para denotar o método de solicitação HTTP DELETE e esta chamada de API excluirá o produto com chave primária 7.

$url = ‘http://example.com/api/products/7’;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, ‘DELETE’);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response_json = curl_exec($ch);
curl_close($ch);
$response=json_decode($response_json, true);

Resumo

É claro que há muito mais nas APIs REST do que vimos aqui. Mas a ideia por trás deste artigo é fornecer uma base básica, mas sólida, sobre APIs REST. Espero que agora você tenha uma compreensão clara do que é API REST e como construí-la sozinho. Compartilhe seus pensamentos na seção de comentários. Eu adoraria ouvir de você.


Publicado em 30/11/2023 23h00

Artigo original: