2. Hello!
Eu sou Bruno Souza!
➔ Analista de Sistemas - MRE pela empresa Datainfo
➔ Graduado em Análise e Desenvolvimento de Sistemas - UNIP
➔ Pós-graduando em Big Data e Ciência de Dados - PUC Minas
➔ ZCPE
➔ Microsoft Specialist - HTML5, CSS e JS
@Bruno_HSouza brunohsouza
3. A utilização de APIs traz algumas vantagens como:
➔ Grande oportunidade de negócios para empresas;
➔ Novos fluxos de receita
➔ Maximização de valores para os clientes e negócio
➔ Expansão de mercado
➔ Ponto central de processamento e acesso aos dados
➔ Encapsulamento da lógica de negócios
➔ Disponibilização das funcionalidades em diversos dispositivos
4. A ascensão do uso de API’s em uma abordagem técnica se torna um desafio, pois a
arquitetura deve ser:
➔ Sólida;
➔ Segura;
➔ Performática;
➔ Flexível;
➔ Auto-escalável;
➔ Resiliente;
➔ Altamente disponível
5.
6. O que é o API Platform?
Um conjunto de ferramentas para facilitar a criação e o
consumo de Web API’s.
Segundo o conceito de plataforma em TI, pode ser definido
como: um grupo de tecnologias que são usadas como
base sobre a qual outras aplicações, processos ou
tecnologias são desenvolvidas.
7. O que é o API Platform?
Visa oferecer um conjunto de ferramentas e
padrões para facilitar a construção de sistemas
baseados em API.
8. “ API Platform is the most
advanced API platform, in
any framework or language.
Fabien Potencier
9. ➔ Desenvolvido por Kévin Dunglas
➔ Possui 4.172 estrelas no Git Hub [17 de maio de 2019
]
➔ 437 Forks no Git Hub [17 de maio de 2019]
➔ Versão 2.4.2 [17 de maio de 2019]
11. A forma recomendada para a instalação do API Platform e utilização de uma forma mais
rápida é via docker-compose. Para isto, basta:
1. Baixar uma versão de sua distribuição oficial ou via git clone pelo github;
2. Instalar o Docker (caso já não tenha feito);
3. Abrir o terminal onde está o skeleton do projeto;
4. Executar os comandos:
a. docker-compose pull - para baixar a última versão da imagem
b. docker-compose up -d - para executar em background ou docker-
compose up para executar em primeira tela, permitindo visualizar os logs de
acesso e erro referentes aos containers;
14. Distribuição dos containers
Nome Descrição Porta(s)
php Onde fica a API e o seu código-fonte, composer e configs 9000 | n/a
db Um servidor de banco de dados com o PostgresSQL 5432
client Um servidor de desenvolvimento para a camada front-end (PWA, SPA) 80
admin Um servidor de desenvolvimento para gerenciamento do conteúdo do site 81
cache-proxy Um servidor HTTP de cache proxy baseado em Varnish 8081
mercure Servidor dedicado para execução do protocolo Mercure 443
h2-proxy Um servidor HTTPS e HTTP/2 com proxy para todos os apps 443 (client)
444 (admin)
8443 (api)
8444 (cache-proxy)
17. Você pode fazer a instalação via Composer, utilizando a estrutura do Symfony Flex e a recipe
para o API Platform. Para isto, basta executar os seguintes passos:
➔ Execute: composer create-project symfony/skeleton my-api
➔ Entre no diretório de instalação e execute o comando: composer req api
➔ Para executar a API com o WebServerBundle: composer req server-dev
➔ Para visualização do site execute: bin/console server:run
➔ Acesse o localhost do server, geralmente http://127.0.0.1:8000;
➔ Para acessar a interface de documentação da API, acesse: http://127.0.0.1:8000/api
19. Distribuído em alguns componentes principais:
➔ The API Component;
➔ The Admin Component;
➔ The Client Component;
➔ The Schema Generator Component;
21. O Schema Generator Component é uma ferramenta executada via linha de comando no
terminal (CLI) para facilitar e gerar modelos de dados instantâneos a partir do
vocabulário do site Schema.org;
22. O Schema.org é uma comunidade colaborativa fundada por
membros do Google, Microsoft, Yahoo e Yandex com a missão de
criar, manter e promover schemas para estruturas de dados na
internet.
Possui um vocabulário que pode ser utilizado em diversos
formatos. Este vocabulário é facilmente estendido e abordam
entidades, relacionamentos e actions.
23. Conjunto de vocábulos ou palavras representadas em uma
determinada língua
Vocabulário
24.
25. Para utilizar o Schema Generator basta executar o comando no terminal:
docker-compose exec php vendor/bin/schema
Caso não esteja utilizando o API Platform com o docker é possível instalar o componente
via Composer executando o comando:
composer require --dev api-platform/schema-generator
26. Para executar o Schema Generator:
➔ acesse o site Schema.org, escolha os types e properties dos dados necessários para
a sua aplicação;
➔ Com os dados escolhidos, crie um arquivo chamado schema.yaml dentro do
diretório config da sua API e preencha conforme o modelo dos dados do
Schema.org;
➔ Execute o comando para gerar os modelos:
vendor/bin/schema generate-types src config/schema.yaml
27. types:
# Parent class of Person
Thing:
properties:
name: ~
Person:
properties:
familyName: ~
givenName: ~
additionalName: ~
address: ~
PostalAddress:
# Disable the generation of the class hierarchy for this type
parent: false
properties:
# Force the type of the addressCountry property to text
addressCountry: { range: "Text" }
addressLocality: ~
addressRegion: ~
postOfficeBoxNumber: ~
postalCode: ~
streetAddress: ~
33. Método Obrigatório Descrição
GET SIM Recupera uma lista de elementos (paginados)
POST NÃO Cria um novo elemento
Método Obrigatório Descrição
GET SIM Recupera um elemento
PUT NÃO Altera um elemento
DELETE NÃO Deleta um elemento
Collection
Item
35. ➔ É possível habilitar ou desabilitar operações da seguinte forma:
/**
* A person (alive, dead, undead, or fictional).
* @see http://schema.org/Person Documentation on Schema.org
* @ORMEntity
* @ApiResource(iri="http://schema.org/Person"
* @collectionOperations={"create”={"method"="POST"}},
* @itemOperations={"find"={"method"="GET"}},
* )
*/
class Person
{
...
}
44. Json-LD - Json for Linked Data
➔ É um formato de serialização utilizado na comunicação entre aplicações cliente e
servidor;
➔ Baseado na RFC4627
➔ Padronizado pela W3C recommandation (2014) para formatos de hypemedia;
➔ Fácil de usar: JSON em formato padrão, mas com algumas chaves especiais (@) e
mapeadas por contexto;
➔ Apoiado por empresas como: Google, BBC, Microsoft e órgãos governamentais de alguns
países (EUA e Europa);
➔ Compatível com tecnologias de web semântica: RDF, SPARQL, etc.
45. Json-LD Oferece
➔ Maior interoperabilidade entre os dados
➔ Mecanismo de identificação universal através de IRI’s (Internationalized Resource
Identifier)
➔ Forma de distinguir chaves compartilhadas por meio de mapeamentos através IRI’s e
contexts
➔ Mecanismo de referências entre objetos JSON
➔ Associação de tipos de dados
➔ Facilidade de expressar gráficos direcionados em um único documento
47. Linked Data Principles
➔ Usar as URI’s para nomear as coisas
➔ Use URIs HTTP para que as pessoas possam procurar o desejado
➔ Quando alguém pesquisar por URI’s, forneça informações úteis
➔ Inclua links para outras URI’s para que eles possam descobrir mais
dados
Tim Berners Lee
51. ➔ É um padrão que permite uma construção mais amigável e interoperável de API’s;
➔ Sua fundação é baseada no Hydra Core Vocabulary (http://www.hydra-
cg.com/spec/latest/core/);
➔ Define alguns conceitos e fundamentos que permitem clientes entenderem como
interagir com API’s, uma vez que as informações estão disponíveis em um formato
genérico;
➔ Disponibiliza uma descoberta de entrypoints automaticamente se os cabeçalhos das
responses da API estiverem no formato estipulados pela RFC5988;
➔ Permite que os dados sejam lidos por humanos e máquinas através de markups;
60. Com base no Symfony Framework, possui várias funcionalidades como:
➔ Pagination
➔ Filters
➔ Ordenação
➔ Validates
➔ Serializer
➔ Router
➔ Tratamento de erros
➔ Cache
➔ Events
➔ Messenger
➔ Suporte aos Bundles do FOS
➔ Suporte à GraphQL
➔ Segurança
➔ Data Providers;
➔ Data Persisters;
➔ HTTPKernel
➔ HTTP/2
62. Oferece suporte à outras funcionalidades, como:
➔ Autenticação com JSON Web Token (JWT);
➔ Autenticação com o OAuth utilizando FosOAuthServer;
➔ Envios de e-mails com Swift Mailer;
➔ Integração com RabbitMQ;
➔ Integração com o MongoDB;
➔ Integração com o Elastic Search;
➔ Integração e utilização do protocolo Mercure;
64. ➔ Qualquer Symfony Controller válida
➔ Recomenda-se utilizar o event system quando aplicável
➔ Utiliza o padrão ADR (Action-Domain-Responder)
Action
Domain Responder
66. ➔ Criado em 2000 por Roy Fielding em uma tese de mestrado
➔ Recursos com identificação única (URI);
➔ Uma funcionalidade por verbo HTTP;
➔ Utiliza uma interface única para requisições;
➔ Utiliza JSON como formato padrão;
➔ Stateless
➔ Hypermedia
➔ Formato de API padrão utilizado pelo API Platform
68. ➔ Baseada na especificação do OpenAPI
➔ Utiliza as ferramentas Swagger e ReDoc
➔ Possui template Configurável
➔ Compatível com a camada de API Gateway da AWS
➔ Por padrão vem com o Swagger UI habilitado
71. ➔ Query Language para API criada pelo Facebook em 2012;
➔ Fortemente tipada;
➔ Retorna apenas os dados requisitados pelo cliente;
➔ Retorna vários recursos em um único request;
➔ Baseado em 3 tipos de requisições (root types):
◆ query;
◆ mutation;
◆ subscription;
➔ docker-compose exec php composer req webonyx/graphql-
php && bin/console cache:clear
75. ➔ Documentação interativa com o GraphiQL
➔ IDE no browser com várias funcionalidades como:
◆ Possibilidade de testar as querys e mutations;
◆ Prettify;
◆ Histórico;
◆ Documentação com filtro para buscas;
◆ Autocomplete;
79. O API Platform Admin é um componente para suporte a criação de conteúdos da API.
➔ Possui um layout baseado em Material Design;
➔ Baseado em React;
➔ SPA sem acoplamento com o Back-end;
➔ Totalmente customizável;
➔ Gerador de CRUD para todas as resources presentes na API;
➔ Gerador de código baseado na API Doc ou no Schema.org;
➔ Suporte à paginação e autenticação;
➔ Exibição de erros amigáveis;
83. The Client Component
O Client Generator é o caminho mais rápido para criação de webapps e apps mobile
➔ Suporta o formato de dados Hydra;
➔ Suporta React, React Native, Vue.js e Angular;
➔ Integração com Bootstrap e Font Awesome;
➔ Utiliza conceitos do ES6;
➔ Utilização de input types apropriados;
➔ Suporte a atualizações utilizando o protocolo Mercure;
➔ Suporte à pessoas com deficiência (ARIA);
85. ➔ API Platform é um conjunto com as principais tendências em ferramentas no
mercado para construção de API’s de uma forma mais fácil e rápida
➔ Possui uma filosofia de não prender o desenvolvedor em estruturas já criadas,
grandes possibilidades de customização para se adequar às especificações dos
projetos
➔ Possui uma filosofia de melhorar a forma de como se desenvolve API’s
oferecendo as melhores práticas
Baixar uma versão de sua .distribuição oficial que está em formato .tar.gz ou via git clone pelo github;
Instalar o Docker (caso já não tenha feito);
Abrir o terminal onde está o skeleton do projeto;
Executar os comandos:
docker-compose pull - para baixar a última versão da imagem
docker-compose up -d - para executar em background ou docker-compose up para executar em primeira tela, permitindo visualizar os logs de acesso e erro referentes ao container;
Gera Entidades a partir do vocabulário do site Schema.org
O Schema.Org é um vocabulário, criado para tentar unificar e padronizar dados.
As classes geradas pelo schema generator são implementas utilizando:
os padrões das PSR’s.
Auto-documentação com o PHPDoc;
Mapeamentos das classes utilizando as annotations do Doctrine;
Validação de dados com o Symfony Validator;
Namespace customizáveis;
Pode ser utilizado em outros frameworks;
Repare que após o comando generate-types, indicamos a pasta onde estão as entidades da API e consequentemente, onde ficarão as models geradas pelo schema. Indicamos também o caminho do arquivo schema.yaml para que o gerador possa fazer a leitura e interpretação de forma correta das models.
Após o procedimento para gerar as models é possível perceber as novas classes de Entidades geradas na estrutura da API. Repare que as classes foram geradas seguindo os padrões das PSR’s, com os comentários e annotations no padrão do Doctrine incluindo o mapeamento das propriedades, com as funções getters e setters, constantes geradas de forma correta.
É possível customizar os namespaces das models e utilizar as validações do Symfony Validator.
É possível também utilizar este componente com outros frameworks PHP além do Symfony.
Vantagens de se usar o schema generator e Schema.org:
Não reinventar a roda;
Os modelos de dados gerados pelo Schema.org são populares e já provaram serem eficientes;
Melhorar o SEO e a UX;
Adicionando os markups do Schema.org, as apps são melhores rankiadas em mecanismos de buscas e habilita algumas funcionalidades como o Google Rich Snippets e Gmail markup
Estar pronto para o futuro;
Melhora os dados para adequação da leitura de máquina, facilitando o acesso e extração de dados da API;
Code First: Baseada nas regras de negócio, a API é codificada diretamente de uma documentação legível;
Design First: As regras de negócio são convertidas para um contrato legível por humanos ou máquinas, o qual o código é implementado
@ApiResource: tag de marcação para identificação de um objeto PHP que representa um endpoint suas entradas e saídas. Esta classe não precisa estar mapeada com o Doctrine, porém se estiver, traz muitas facilidades
para a persistência e gerenciamento dos dados.
Persisters: Para realizar as mutações dos dados, o API Platform utiliza os Data Persisters, os quais recebem uma instância da classe mapeada com a tag @ApiResource juntamente com os dados submetidos pelo cliente.
Data Providers é um componente para comunicação com as camadas de persistência, podendo ser um RDBM ou NoSQL, ElasticSearch, etc.
Esta tabela mostra as operações disponibilizadas automaticamente quando a annotation @ApiResource é habilitada.
Por padrão o JSON API também permite o uso do método PATCH para atualização de dados;
CollectionsOperation - defina operações para as coleções de dados
ItemOperations - define operações para os itens ,
Requirements
Defaults
Options
Schemes,
Paths,
Hydra contexts
Desde a versão 2.1, o API Platform disponibiliza a opção de criar subresources. Apenas para operações com GET.
Uma subresource é uma entidade que depende ou pertence de outra resource.
É possível definir o caminho (path) da subresource
Max Depth
Por padrão, o API Platform vem com o JSON-LD habilitado como formato padrão. Porém, vários formatos de dados são suportados.
O APi Platform detecta o melhor formato dos dados automaticamente baseado em:
Os formatos habilitados
O formato da requisição, baseado no campo Accept, HTTP Header ou uma extensão adicionada à URL
É possível habilitar um formato próprio customizado bastando registrar um encoder.
A chave data deve ser:
Os campos data e error não devem coexistir em um mesmo documento;
Single Resources -> resource object, resource identifier object ou null;
Collections -> array of resource objects, array of resource identifier object, array vazio [];
Toda Resource deve conter o campos id e type. Estes campos devem ser strings;
Resources Objects devem conter no mínimo os atributos id e type, a menos que o cliente esteja gerando uma nova resource onde o id não é requerido.
Alguns outros atributos que uam resource pode ter:
attributes - contém um objeto que possui atributos representando alguns dados de resources;
Relationships - contém objeto com dados descrevendo os relacionamentos entre resources;
Links - contém objeto com links relacionados à resources;
Meta - contém um objeto com metadados não padronizados sobre resources os quais não podem ser representados por atributos ou relacionamentos
Ferramenta de análise de estrutura de dados do Google:
Os desenvolvedores precisam aprender basicamente as duas keywords principais @context e @id
@context - Usado para definir os atalhos em um documento JSON. Estes atalhos são chamados de termos e ajuda os desenvolvedores a expressar identificadores específicos de uma maneira compacta;
@id - Usado unicamente para identificar coisas que são escritas como IRIs ou identificadores de nós vazios;
https://search.google.com/structured-data/testing-tool?utm_campaign=devsite&utm_medium=jsonld&utm_source=intro-structured-data
Tem o objetivo de trazer:
Uma maior interoperabilidade para os Web services;
Um mecanismo de identificação universal para objetos JSON através do uso de IRIs (Internationalized Resource Identifier);
Uma forma de distinguir chaves compartilhadas entre diferentes documentos de objetos JSON por meio de mapeamentos através de IRIs e contexts;
Um mecanismo onde um objeto JSON em um site pode referenciar à outro objeto JSON de um site diferente;
A habilidade de anotações de strings em sua própria linguagem;
Uma forma de associar tipos de dados com valores como data e hora;
Uma facilidade de expressar um ou mais gráficos direcionados em um único documento, como em uma rede social;
Simplicidade
Não requer libs externas ou processamentos extra para sua utilização em sua forma mais básica
Compatibilidade
Um documento JSON-LD é sempre um objeto JSON válido. Isto assegura que os padrões JSON funcionem em um documento JSON-LD.
Intensidade
Torna a leitura humana mais fácil, requer o mínimo esforço possível do desenvolvedor;
Internacionalização
Através da tag @language permite definir o idioma do contexto de dados;
Expressividade
A sintaxe de grafos serializados permite que qualquer objeto no mundo real possa ser expressado
Faz a descrição do json auto descritivo
Ferramenta de análise de estrutura de dados do Google:
https://search.google.com/structured-data/testing-tool?utm_campaign=devsite&utm_medium=jsonld&utm_source=intro-structured-data
A navegação pela internet está toda palpada em como trabalhar e definir hyperlinks. Sem os hyperlinks seria impossível navegar pela internet. Usuários tipicamente clicam em links etiquetados que representam os seus interesses. O problema é que as máquinas não reconhecem estes hyperlinks. Para das as máquinas um entendimento similar, os links podem ser criados com um relation type (um token registrado ou uma URI identificando a semântica dos links). A Hydra foi criada para facilitar a identificação de links diferenciáveis por máquinas.
É um padrão que permite uma construção mais amigável e interoperável de API’s;
Sua fundação é baseada no Hydra Core Vocabulary (http://www.hydra-cg.com/spec/latest/core/);
Define alguns conceitos e fundamentos que permitem clientes entenderem como interagir com API’s, uma vez que as informações estão disponíveis em um formato genérico;
Disponibiliza uma descoberta de entrypoints automaticamente se os cabeçalhos das responses da API estiverem no formato estipulados pela RFC5988;
Permite que os dados sejam lidos por humanos e máquinas através de markups;
http://www.markus-lanthaler.com/hydra/
O JSON Web Token é um padrão baseado em JSON o qual tem o objetivo de controlar o acesso do usuário baseado no token tramitado entre as requisições.
O JSON Web Token é um padrão baseado em JSON o qual tem o objetivo de controlar o acesso do usuário baseado no token tramitado entre as requisições.
Action Domain Responder tem por objetivo organizar as uma interface única de interação entre o cliente e o servidor em 3 papéis distintos.
Action é a lógica para conectar o Domain ao Responder. Ele invoca o Domain com os dados do Request, depois invoca o Responder com os dados necessários para se criar o objeto Response.
Domain é o entrypoint do domínio, formando a camada lógica da aplicação
Responder é a representação lógica para se criar o objeto Response
The web handler receives an HTTP request and dispatches it to an Action.
The Action invokes the Domain, collecting any required inputs to the Domain from the HTTP request.
The Action then invokes the Responder with the data it needs to build an HTTP response (typically the HTTP request and the Domain results, if any).
The Responder builds an HTTP response using the data fed to it by the Action.
The Action returns the HTTP response to the web handler sends the HTTP response.
Representational State Transfer (REST)
Sintaxe universal para identificar os recursos por meio das URI’s;
Conjunto de operações bem definidas que se aplicam a todos os resources. HTTP methods
Stateless = Protocolo cliente/servidor sem estado. Cada mensagem contém toda informação necessária para compreender o pedido