Imaster

Como gerenciar uma estrutura de hospedagem baseada em nuvem com PHP: Cloudways API Class

A hospedagem em nuvem permite a criação de estruturas para sites ou aplicativos que podem ser gerenciadas para se adaptarem às necessidades em termos de número de servidores para lidar com a carga atual.

Leia este artigo para aprender a gerenciar uma estrutura de hospedagem em nuvem a com PHP usando o Cloudways API.

Acessando APIs web via HTTP

Se você estiver familiarizado com uma REST API, você deve saber sobre as chamadas HTTP criadas para obter e publicar dados de um cliente para o servidor.

E se você deseja criar um cliente REST API em PHP? Sua resposta poderia ser seguir com CURL. CURL é o método mais utilizado para fazer chamadas HTTP, mas ele impõe vários passos complicados.

Vamos ver uma simples solicitação CURL em PHP:

$url = "https://api.cloudways.com/api/v1";
$resource = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Accept: application/json, Content-Type: application/json"]);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");

Você precisa chamar o método curl_setopt() para definir o cabeçalho e o método de solicitação HTTP específico, como GET, POST, PUT, etc. Não parece simples. Então, qual é a melhor alternativa robusta?

Aqui vem Guzzle. Vamos ver como o Guzzle cria uma solicitação:

$client = new GuzzleHttpClient();
$res = $client->request("GET", "https://api.cloudways.com/api/v1", [
    "headers" => [
        "Accept" => "application/json",
        "Content-type" => "application/json"
]]);

Você pode ver que é simples. Você só precisa iniciar o cliente Guzzle e passar um método HTTP e uma URL. Depois disso, passe a matriz de cabeçalhos e outras opções.

Instale o Cliente Guzzle

Guzzle é um cliente PHP HTTP simples que fornece uma maneira fácil de criar chamadas e integração com serviços web. É a camada de abstração padrão usada para enviar mensagens ao servidor. Vários recursos proeminentes do Guzzle são:

  1. Envia solicitações síncronas e assíncronas.
  2. Ele fornece uma interface simples para a construção de séries de consulta, solicitações POST, transmissão de uploads e downloads grandes, upload de dados JSON, etc.
  3. Permite o uso de outras bibliotecas compatíveis PSR7 com Guzzle.
  4. Permite escrever ambiente e transportar código agnóstico.
  5. O sistema Middleware permite aumentar e compor o comportamento do cliente.

A maneira preferida de instalar o Guzzle é o Composer. Se você ainda não instalou o Composer, faça o download aqui.

Agora, para instalar o Guzzle, execute o seguinte comando no terminal SSH:

composer require guzzlehttp/guzzle

Este comando irá instalar a versão mais recente do Guzzle no seu projeto PHP. Como alternativa, você também pode defini-lo como uma dependência no arquivo composer.json e adicionar o código a seguir.

{
  "require": {
    "guzzlehttp/guzzle": "~6.0"
  }
}

Depois disso, execute o comando de instalação do composer. Então, você precisa incluir o autoloader e adicionar mais alguns arquivos para usar Guzzle:

require 'vendor/autoload.php';
use GuzzleHttpClient;
use GuzzleHttpExceptionRequestException;
use GuzzleHttpPsr7Request;

O processo de instalação terminou. Agora é hora de trabalhar com um exemplo real de fazer chamadas HTTP com uma API. Para efeitos deste artigo, trabalharei com a Cloudways API.

O que você pode fazer com a Cloudways API?

Cloudways é um provedor de hospedagem gerenciada para PHP, Magento, WordPress e muitos outros frameworks e CMS. Ele tem uma API que você pode usar para realizar operações CRUD em servidores e aplicativos.

Confira os casos de uso mais populares da Cloudways API para ver como você pode integrá-lo em seus projetos.

Neste artigo, vou fazer chamadas HTTP para realizar operações específicas nos servidores Cloudways.

Enviar as solicitações HTTP

Como mencionei anteriormente, enviar solicitações HTTP no Guzzle é muito fácil. Você só precisa passar o URI base, método HTTP e cabeçalhos.

Se houver uma camada de autenticação na API externa, você também poderá passar esses parâmetros. Da mesma forma, Cloudways API precisa de endereço de e-mail e uma chave API para autenticar usuários e enviar a resposta. Você precisa registrar uma conta Cloudways para obter suas credenciais API.

Vamos começar usando o arquivo CloudwaysAPI.php para configurar o Guzzle para fazer chamadas HTTP. Também usarei os métodos de classe para fazer chamadas HTTP a partir deles.

A URL da API não varia, então usarei o qualificador const com ele. Depois disso, o concatenarei com outros sufixos de URL para obter a resposta. Além disso, tenho declarado variáveis $auth_key, $auth_email que irão manter o email de autenticação e a chave API. $AccessToken manterá o token temporário que será renovado a cada vez.

Criar uma solicitação de postagem para obter token de acesso

O token de acesso será gerado a partir da URL https://api.cloudways.com/api/v1/oauth/access_token toda vez que acessar a API. Isso será definido em $url com matriz de dados adicional que mantém credenciais de autenticação.

Posteriormente, criei uma solicitação POST com a URL de base e a série de consulta. A resposta será descodificada e o token de acesso é salvo para ser usado de todos os métodos.

A solicitação POST para obter o token de acesso está concluída. Além disso, se você observou no tratamento de exceção, eu declarei um método StatusCodeHandling($e), que cuidará dos códigos de resposta (códigos HTTP como 404, 401, 200 etc.) e lançará uma exceção relacionada.

A principal classe cliente está agora concluída. Eu posso estendê-la para criar mais solicitações de HTTP para diferentes casos.

Criar uma solicitação get para buscar todos os servidores

Uma vez que o Usuário é autenticado, eu posso buscar todos os meus servidores e aplicativos da Cloudways. /server é o sufixo concatenado com a URI de base. Desta vez, vou anexar o Token de acesso com a série de Autorização no cabeçalho Guzzle para buscar todos os servidores na resposta JSON. Para fazer isso, eu criei um novo método chamado getServers.

Agora, crie o arquivo index.php e inclua CloudwaysAPIClient.php na parte superior. Em seguida, declaro minha chave API e e-mail, passando para o construtor de classe para finalmente obter os servidores.

include 'CloudwaysApi.php';
$api_key = 'W9bqKxxxxxxxxxxxxxxxxxxxjEfY0';
$email = 'shahroze.nawaz@cloudways.com';
$cw_api = new CloudwaysAPI($email,$api_key);
$servers = $cw_api->getServers();
echo '
';
var_dump($servers);
echo '

';

Vamos testá-lo no Postman para verificar se as informações e os códigos de resposta corretos estão sendo buscados.

Nota: Para um ambiente de desenvolvimento local do Windows, você precisa adicionar o arquivo cert.pem à pasta PHP no XAMPP e adicionar ” curl.cainfo =”C:pathtocacert.pem”ao arquivo php.ini

Criar solicitação de exclusão para excluir um servidor

Da mesma forma, você também pode excluir o servidor de nuvem passando o $serverid para o método deleteServer.

Iniciando aplicativos no servidor

Você também pode obter, criar e excluir aplicativos PHP no servidor, passando os parâmetros necessários. Para obter todos os aplicativos, basta usar a URL “/app”.

Para criar um aplicativo em qualquer servidor você precisa passar 4 parâmetros $serverid, $application, $app_version, $app_name:

Estes são alguns dos principais casos de uso para consumir a Cloud API em PHP com guzzle você também pode criar métodos para os seguintes casos de uso:

  1. CloudwaysBot Api
  2. Git Api
  3. Gerenciamento de Chaves SSH Api
  4. Segurança Api

Baixando e usando a Cloudways API Client Class

A Cloudways client API class pode ser baixada e instalada a partir de um arquivo ZIP ou usando a ferramenta Composer usando as instruções também disponíveis na página de download.

Se você gostou deste artigo, compartilhe-o com outros colegas desenvolvedores. Se você tiver perguntas, poste um comentário aqui.

***

Shahroze Nawaz faz parte do time de colunistas internacionais do iMasters. A tradução do artigo é feita pela Redação iMasters, com autorização do autor, e você pode acompanhar o artigo em inglês no link: https://www.phpclasses.org/blog/package/10326/post/1-How-to-Manage-a-Cloud-Based-Hosting-Structure-with-PHP.html

Powered by WPeMatico