View
280
Download
0
Category
Preview:
Citation preview
>>> RESTful API>>> Com Node.js e Restify
Name: Anderson Pimentel†
Date: 19 de Março de 2018
†apds.anderson@icomp.ufam.edu.br
[~]$ _ [1/31]
>>> Agenda
1. Introdução
2. Boas Práticas
3. Hands-onAmbiente
4. Referências
[~]$ _ [2/31]
>>> Introdução
ObjetivoDesenho e Implementação de APIs Web.
O minicurso se dará da seguinte forma:
* 19.03.18 -> Fundamentos
* 21.03.18 -> Hands-on
[1. Introdução]$ _ [3/31]
>>> Introdução
ObjetivoDesenho e Implementação de APIs Web.
O minicurso se dará da seguinte forma:
* 19.03.18 -> Fundamentos
* 21.03.18 -> Hands-on
[1. Introdução]$ _ [3/31]
>>> O que são APIs?
* Acrônimo utilizado pela comunidade computacional e édenominado como Application Programming Interface
* Interface de programação de aplicativos referentes aométodo de comunicação entre duas entidades de código
* APIs servem para comunicar programas do mesmo computador
[1. Introdução]$ _ [4/31]
>>> O que são APIs?
* Acrônimo utilizado pela comunidade computacional e édenominado como Application Programming Interface
* Interface de programação de aplicativos referentes aométodo de comunicação entre duas entidades de código
* APIs servem para comunicar programas do mesmo computador
[1. Introdução]$ _ [4/31]
>>> O que são APIs?
* Acrônimo utilizado pela comunidade computacional e édenominado como Application Programming Interface
* Interface de programação de aplicativos referentes aométodo de comunicação entre duas entidades de código
* APIs servem para comunicar programas do mesmo computador
[1. Introdução]$ _ [4/31]
>>> APIs Web
* Comunicação entre várias máquinas em uma rede
* Possibilitam invocar a execução de código em outra máquinapela internet
* Ótimas para controlar a exposição do código* Empresas mantém seus códigos privados sem ter que revelar
o código real, apenas uma interface de comunicação.
* Uma máquina pode usar várias APIs web para criar umaplicativo novo, conhecido como mashup
[1. Introdução]$ _ [5/31]
>>> APIs Web
* Comunicação entre várias máquinas em uma rede
* Possibilitam invocar a execução de código em outra máquinapela internet
* Ótimas para controlar a exposição do código* Empresas mantém seus códigos privados sem ter que revelar
o código real, apenas uma interface de comunicação.
* Uma máquina pode usar várias APIs web para criar umaplicativo novo, conhecido como mashup
[1. Introdução]$ _ [5/31]
>>> APIs Web
* Comunicação entre várias máquinas em uma rede
* Possibilitam invocar a execução de código em outra máquinapela internet
* Ótimas para controlar a exposição do código
* Empresas mantém seus códigos privados sem ter que revelaro código real, apenas uma interface de comunicação.
* Uma máquina pode usar várias APIs web para criar umaplicativo novo, conhecido como mashup
[1. Introdução]$ _ [5/31]
>>> APIs Web
* Comunicação entre várias máquinas em uma rede
* Possibilitam invocar a execução de código em outra máquinapela internet
* Ótimas para controlar a exposição do código* Empresas mantém seus códigos privados sem ter que revelar
o código real, apenas uma interface de comunicação.
* Uma máquina pode usar várias APIs web para criar umaplicativo novo, conhecido como mashup
[1. Introdução]$ _ [5/31]
>>> APIs Web
* Comunicação entre várias máquinas em uma rede
* Possibilitam invocar a execução de código em outra máquinapela internet
* Ótimas para controlar a exposição do código* Empresas mantém seus códigos privados sem ter que revelar
o código real, apenas uma interface de comunicação.
* Uma máquina pode usar várias APIs web para criar umaplicativo novo, conhecido como mashup
[1. Introdução]$ _ [5/31]
>>> APIs Web
A melhor maneira de prever o futuro é inventá-lo (AlanKay, cientista da computação, em 1971)
[1. Introdução]$ _ [6/31]
>>> APIs Web
Qual o ganho de uma empresa por liberar conteúdo via APIs?
1. Ajuda os desenvolvedores a criar novos soluções e serviçosusando sua plataforma
2. Promove a empresa
Resumindo: Implementar APIs Web acessíveis não égenerosidade!! É um investimento lucrativo para muitasempresas.
[1. Introdução]$ _ [7/31]
>>> APIs Web
Qual o ganho de uma empresa por liberar conteúdo via APIs?
1. Ajuda os desenvolvedores a criar novos soluções e serviçosusando sua plataforma
2. Promove a empresa
Resumindo: Implementar APIs Web acessíveis não égenerosidade!! É um investimento lucrativo para muitasempresas.
[1. Introdução]$ _ [7/31]
>>> APIs Web
Qual o ganho de uma empresa por liberar conteúdo via APIs?
1. Ajuda os desenvolvedores a criar novos soluções e serviçosusando sua plataforma
2. Promove a empresa
Resumindo: Implementar APIs Web acessíveis não égenerosidade!! É um investimento lucrativo para muitasempresas.
[1. Introdução]$ _ [7/31]
>>> APIs Web
Qual o ganho de uma empresa por liberar conteúdo via APIs?
1. Ajuda os desenvolvedores a criar novos soluções e serviçosusando sua plataforma
2. Promove a empresa
Resumindo: Implementar APIs Web acessíveis não égenerosidade!! É um investimento lucrativo para muitasempresas.
[1. Introdução]$ _ [7/31]
>>> Protocolo para APIs Web
DefiniçãoProtocolos são regras estabelecidas para comunicação entremáquinas.
Uma abstração comum para conceitualizar isso é o modelo OSI(Open Systems Interconnection Model )
[1. Introdução]$ _ [8/31]
>>> Protocolo para APIs Web
DefiniçãoProtocolos são regras estabelecidas para comunicação entremáquinas.
Uma abstração comum para conceitualizar isso é o modelo OSI(Open Systems Interconnection Model )
[1. Introdução]$ _ [8/31]
>>> Camada de Aplicação (HTTP, SSH, FTP)
Podemos definir conceitualmente duas camadas acima da camadade aplicação:
* Camada de Web Service
* Camada de Formatação de Mensagem
[1. Introdução]$ _ [9/31]
>>> Web Service
% SOAP
! REST
[1. Introdução]$ _ [10/31]
>>> Web Service
% SOAP
! REST
[1. Introdução]$ _ [10/31]
>>> Web Service
% SOAP
! REST
[1. Introdução]$ _ [10/31]
>>> Formatação de Mensagem
% XML
! JSON
[1. Introdução]$ _ [11/31]
>>> Formatação de Mensagem
% XML
! JSON
[1. Introdução]$ _ [11/31]
>>> Formatação de Mensagem
% XML
! JSON
[1. Introdução]$ _ [11/31]
>>> REST
REST -> REpresentational State Transfer
* Conjunto de estilos e guias, pois carrega recursos do HTTPcom o objetivo de transmitir informação
* Usa verbos HTTP (get, post, put, delete entre outros) paralidar com o gerenciamento de recursos do servidor
* Usa qualquer protocolo para estrutura de dados (xml, jsone etc..)
[1. Introdução]$ _ [12/31]
>>> REST
REST -> REpresentational State Transfer
* Conjunto de estilos e guias, pois carrega recursos do HTTPcom o objetivo de transmitir informação
* Usa verbos HTTP (get, post, put, delete entre outros) paralidar com o gerenciamento de recursos do servidor
* Usa qualquer protocolo para estrutura de dados (xml, jsone etc..)
[1. Introdução]$ _ [12/31]
>>> REST
REST -> REpresentational State Transfer
* Conjunto de estilos e guias, pois carrega recursos do HTTPcom o objetivo de transmitir informação
* Usa verbos HTTP (get, post, put, delete entre outros) paralidar com o gerenciamento de recursos do servidor
* Usa qualquer protocolo para estrutura de dados (xml, jsone etc..)
[1. Introdução]$ _ [12/31]
>>> REST
REST -> REpresentational State Transfer
* Conjunto de estilos e guias, pois carrega recursos do HTTPcom o objetivo de transmitir informação
* Usa verbos HTTP (get, post, put, delete entre outros) paralidar com o gerenciamento de recursos do servidor
* Usa qualquer protocolo para estrutura de dados (xml, jsone etc..)
[1. Introdução]$ _ [12/31]
>>> REST
REST -> REpresentational State Transfer
* Conjunto de estilos e guias, pois carrega recursos do HTTPcom o objetivo de transmitir informação
* Usa verbos HTTP (get, post, put, delete entre outros) paralidar com o gerenciamento de recursos do servidor
* Usa qualquer protocolo para estrutura de dados (xml, jsone etc..)
[1. Introdução]$ _ [12/31]
>>> JSON
JSON -> JavaScript Object Notation
* Derivado do JavaScript
* Pode reduzir significativamente o payload de transferência
[1. Introdução]$ _ [13/31]
>>> JSON
JSON -> JavaScript Object Notation
* Derivado do JavaScript
* Pode reduzir significativamente o payload de transferência
[1. Introdução]$ _ [13/31]
>>> JSON
JSON -> JavaScript Object Notation
* Derivado do JavaScript
* Pode reduzir significativamente o payload de transferência
[1. Introdução]$ _ [13/31]
>>> Restrições e Características REST
* Separação entre cliente e servidor (pull protocol )
* Stateless
* Cacheable
* Uniform Interface
[1. Introdução]$ _ [14/31]
>>> Restrições e Características REST
* Separação entre cliente e servidor (pull protocol )
* Stateless
* Cacheable
* Uniform Interface
[1. Introdução]$ _ [14/31]
>>> Restrições e Características REST
* Separação entre cliente e servidor (pull protocol )
* Stateless
* Cacheable
* Uniform Interface
[1. Introdução]$ _ [14/31]
>>> Restrições e Características REST
* Separação entre cliente e servidor (pull protocol )
* Stateless
* Cacheable
* Uniform Interface
[1. Introdução]$ _ [14/31]
>>> Akiry Tech
Akiry Plataforma de distribuição de vídeos sob demanda(vod).
[1. Introdução]$ _ [15/31]
>>> Akiry Tech
[1. Introdução]$ _ [16/31]
>>> Akiry Tech
(a) IcompTV(b) TVUfamPlay
Figura: Akiry Cases
[1. Introdução]$ _ [17/31]
>>> RESTful API
Consiste em dois conceitos principais:
* Recurso = Objeto associado com data ou identificado comuma URI
* Representação = Forma como o recurso é mostrado
[1. Introdução]$ _ [18/31]
>>> Design uma API
O design de uma API RESTful para um blog:
[1. Introdução]$ _ [19/31]
>>> Boas Práticas para APIs
Um investimento em conhecimento sempre paga osmelhores juros. (Benjamin Franklin)
Nemeth [2017].[2. Boas Práticas]$ _ [20/31]
>>> Métodos HTTP e Recursos da API
Dicas
! Uso de verbos HTTP: POST, PUT, GET, PATCH ou DELETE
! Separar a API em recursos semânticos
! Seguir padrão no uso dos verbos e nomes de recursos
! As versões da API podem ser passadas na url ou nocabeçalho da requisição
Cuidados
% Não usar verbos para identificar recursos da API
% Não há regra que diga se o recurso deve estar no singularou plural
[2. Boas Práticas]$ _ [21/31]
>>> Métodos HTTP e Recursos da API
Dicas
! Uso de verbos HTTP: POST, PUT, GET, PATCH ou DELETE
! Separar a API em recursos semânticos
! Seguir padrão no uso dos verbos e nomes de recursos
! As versões da API podem ser passadas na url ou nocabeçalho da requisição
Cuidados
% Não usar verbos para identificar recursos da API
% Não há regra que diga se o recurso deve estar no singularou plural
[2. Boas Práticas]$ _ [21/31]
>>> Métodos HTTP e Recursos da API
Dicas
! Uso de verbos HTTP: POST, PUT, GET, PATCH ou DELETE
! Separar a API em recursos semânticos
! Seguir padrão no uso dos verbos e nomes de recursos
! As versões da API podem ser passadas na url ou nocabeçalho da requisição
Cuidados
% Não usar verbos para identificar recursos da API
% Não há regra que diga se o recurso deve estar no singularou plural
[2. Boas Práticas]$ _ [21/31]
>>> Métodos HTTP e Recursos da API
Dicas
! Uso de verbos HTTP: POST, PUT, GET, PATCH ou DELETE
! Separar a API em recursos semânticos
! Seguir padrão no uso dos verbos e nomes de recursos
! As versões da API podem ser passadas na url ou nocabeçalho da requisição
Cuidados
% Não usar verbos para identificar recursos da API
% Não há regra que diga se o recurso deve estar no singularou plural
[2. Boas Práticas]$ _ [21/31]
>>> Métodos HTTP e Recursos da API
Dicas
! Uso de verbos HTTP: POST, PUT, GET, PATCH ou DELETE
! Separar a API em recursos semânticos
! Seguir padrão no uso dos verbos e nomes de recursos
! As versões da API podem ser passadas na url ou nocabeçalho da requisição
Cuidados
% Não usar verbos para identificar recursos da API
% Não há regra que diga se o recurso deve estar no singularou plural
[2. Boas Práticas]$ _ [21/31]
>>> Métodos HTTP e Recursos da API
Dicas
! Uso de verbos HTTP: POST, PUT, GET, PATCH ou DELETE
! Separar a API em recursos semânticos
! Seguir padrão no uso dos verbos e nomes de recursos
! As versões da API podem ser passadas na url ou nocabeçalho da requisição
Cuidados
% Não usar verbos para identificar recursos da API
% Não há regra que diga se o recurso deve estar no singularou plural
[2. Boas Práticas]$ _ [21/31]
>>> Códigos de Status HTTP
O uso correto do código de status HTTP1 deve ser enviado comoresposta.
Códigos
* 2xx: Se tudo ocorreu bem
* 3xx: Se o recurso foi movido
* 4xx: Se a requisição não pode ser completada por um errodo cliente (ex: recurso não existe)
* 5xx: Se algo ocorreu no lado da API (ex: exceções)
1https://en.wikipedia.org/wiki/List_of_HTTP_status_codes
[2. Boas Práticas]$ _ [22/31]
>>> Cabeçalhos HTTP
Anexar metadados sobre as requisições que serão enviadas nocabeçalho HTTP2
Dicas
! Paginação
! Autenticação
2https://en.wikipedia.org/wiki/List_of_HTTP_header_fields
[2. Boas Práticas]$ _ [23/31]
>>> Escolha do Framework
O framework deve estar de acordo com as necessidades da API:
Figura: Frameworks Node.js
[2. Boas Práticas]$ _ [24/31]
>>> Restify
Usado em:
! npm3
! Netflix4
3https://www.npmjs.com/4https://netflix.com
[2. Boas Práticas]$ _ [25/31]
>>> Documentação da API
Projetos para Documentação
* APIDOC5
* API Blueprint6
* Swagger7
5http://apidocjs.com/6https://apiblueprint.org/7http://swagger.io/
[2. Boas Práticas]$ _ [26/31]
>>> APIs para Inspiração
Projetos para Documentação
* Github8
* Digital Ocean9
* Stripe10
* Iugu11
8https://developer.github.com/v3/9https://developers.digitalocean.com/documentation/v2/#introduction
10https://stripe.com/docs/api11https://iugu.com/referencias/api
[2. Boas Práticas]$ _ [27/31]
>>> Hands-on
[3. Hands-on]$ _ [28/31]
>>> Ambiente
Criação de ambiente
npm e nodejs$ curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash-$ sudo apt-get install -y nodejs
Curl$ sudo apt-get install curl
PostmanBaixar em site oficial12
12https://www.getpostman.com/
[3. Hands-on]$ _ [29/31]
Hora de Codificação!
>>> Referências
G. Nemeth. 10 best practices for writing node.js rest apis.https://blog.risingstack.com/10-best-practices-for-writing-node-js-rest-apis/, 2017.Accessed: 2017-03-28.
[5. Referências]$ _ [31/31]
Recommended