API: Visão geral e configuração
1Introdução
Neste tutorial, vamos ver como criar uma API. Isso vai permitir que serviços externos se conectem a um serviço de gerenciamento de bloco de notas.
A API oferece as seguintes funcionalidades:
- Listar as notas do usuário.
- Listar as tags vinculadas às notas.
- Buscar notas usando critérios (tag, data, título).
- Recuperar o conteúdo de uma nota pessoal.
2Configuração
Este desenvolvimento usa o plugin Api fornecido pelo Temma. Como indicado na documentação, o plugin deve ser adicionado ao arquivo de configuração, junto com a configuração da conexão ao banco de dados e a desativação das sessões:
<?php
return [
'application' => [
// configuração do banco de dados
'dataSources' => [
'db' => 'mysql://user:password@localhost/dbase'
],
// desativação das sessões
'enableSessions' => false,
],
// ativação do plugin Api
'plugins' => [
'_pre' => [
'\Temma\Plugins\Api',
],
],
];
Você pode pensar que seria preciso adicionar uma instrução à configuração para definir a visão JSON como visão padrão. O plugin Api cuida disso.
Para gerenciar a autenticação dos usuários que se conectam à API, o plugin usa um sistema de par de chaves pública/privada. Os usuários e as chaves são armazenados em um banco de dados. Consulte a documentação do plugin para conhecer os detalhes das tabelas a serem criadas.
3Rotas
A API propõe uma abordagem RPC, com uma rota para cada ação possível. Isso é mais simples do que a abordagem REST, na qual a mesma rota executa ações diferentes dependendo do método HTTP usado para chamá-la.
O plugin da API gerencia as versões da API. As URLs são, portanto, prefixadas com "/v1", para representar a primeira versão da API.
A API vai propor as seguintes URLs:
- /v1/tag/list: Retorna uma lista de tags.
- /v1/note/list: Retorna uma lista de notas.
- /v1/note/search: Busca notas com base em critérios.
- /v1/note/get/[id]: Recupera o conteúdo de uma nota.
- /v1/note/add: Cria uma nova nota.
- /v1/note/update/[id]: Modifica uma nota.
- /v1/note/remove/[id]: Exclui uma nota.
Se a autenticação não estiver correta, um erro HTTP 401 é retornado.
Se um usuário autenticado tentar acessar um recurso que não lhe pertence, um erro HTTP 403 é retornado.
3.1/v1/tag/list
Retorna a lista de tags usadas pelas notas do usuário, com o número de notas correspondentes a cada tag.
Exemplo de retorno (formato JSON):
{
"informatica": 1,
"web": 1,
"culinaria": 1
}
3.2/v1/note/list
Retorna a lista de notas do usuário.
Exemplo de retorno (formato JSON):
[
{
"id": 123,
"title": "Sites interessantes",
"tags": ["informatica", "web"],
"creation": "2024-01-01 12:00:00",
"update": "2024-02-01 16:00:00"
},
{
"id": 456,
"title": "Cursos de culinária online",
"tags": ["culinaria", "web"],
"creation": "2025-01-01 10:00:00",
"update": "2025-01-01 10:00:00"
}
]
3.3/v1/note/search
Retorna uma lista de notas pertencentes ao usuário, obtida a partir de critérios fornecidos em parâmetros GET.
Parâmetros possíveis (todos opcionais):
- tag (string): Tag associada às notas.
- title (string): String a buscar no título das notas.
A resposta é semelhante à da URL /note/list.
3.4/v1/note/get/[id]
Retorna todos os dados de uma nota cujo identificador é passado como parâmetro na URL.
Exemplo de retorno (formato JSON):
{
"id": 123,
"title": "Sites interessantes",
"tags": ["informatica", "web"],
"creation": "2024-01-01 12:00:00",
"update": "2024-02-01 16:00:00",
"content": "<p>Pequena lista de sites:</p>
<ul>
<li><a href=\"https://www.temma.net/\">Temma</a></li>
</ul>"
}
Se a nota solicitada não pertencer ao usuário, um erro HTTP 403 é retornado.
3.5/v1/note/add
Cria uma nova nota, usando dados fornecidos em parâmetros POST ou GET.
Parâmetros esperados (todos obrigatórios):
- title (string): Título da nota.
- tag (string | array): Tag ou lista de tags a associar à nota.
- content (string): Conteúdo da nota em formato HTML.
Para fornecer uma lista de tags, envie vários parâmetros chamados tag[].
Esta URL retorna o identificador da nota criada.
3.6/v1/note/update/[id]
Atualiza os dados da nota cujo identificador é fornecido como parâmetro na URL.
A atualização usa os dados fornecidos como parâmetro POST ou GET. Cada parâmetro é opcional, e um parâmetro fornecido substitui o valor salvo.
Os parâmetros possíveis são:
- title (string): Título da nota.
- tag (string | array): Tag ou lista de tags a associar à nota.
- content (string): Conteúdo da nota em formato HTML.
Para fornecer uma lista de tags, você precisa enviar vários parâmetros chamados tag[].
Esta URL retorna true em caso de sucesso.
Se a nota solicitada não pertencer ao usuário, um erro HTTP 403 é retornado.
3.7/v1/note/remove/[id]
Exclui a nota cujo identificador é fornecido como parâmetro na URL.
Esta URL retorna true em caso de sucesso.
Se a nota solicitada não pertencer ao usuário, um erro HTTP 403 é retornado.