• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
REST - The right way
 

REST - The right way

on

  • 377 views

 

Statistics

Views

Total Views
377
Views on SlideShare
363
Embed Views
14

Actions

Likes
1
Downloads
0
Comments
0

2 Embeds 14

http://www.linkedin.com 7
https://www.linkedin.com 7

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    REST - The right way REST - The right way Presentation Transcript

    • REST The right way
    • Quem sou? Luís Santos - luis@luissantos.pt Developer @ SAPO - Portugal Telecom
    • Rest: O que é?
    • Rest: O que é? ● ● ● ● Representational state transfer Arquitectura Baseada em HTTP Principios ○ Client-Server ○ Stateless ○ Cacheable ○ Layered System
    • Rest: Porquê?
    • Multiplataforma ● Servidores ○ ● Todos os sistemas operativos e plataformas Clientes ○ Todas as plataformas (incluindo p. moveis)
    • Segurança ● Confidencialidade dos dados ○ SSL ■ Destribuição de certificados ● Autenticação com certificados de cliente
    • Escalabilidade ● Escalabilidade horizontal ○ Proxys ○ Cache ○ Load Balancer
    • Recursos
    • Recursos Elementos de informação ou “registos” que podem usados através do seu URI (uniform resource identifier). Exemplos: /api/books/ /api/books/9780199535569/ /api/books/9780199535569/authors /api/authors/ /api/authors/123/
    • Verbos HTTP GET, POST, PUT, DELETE, HEAD, OPTIONS, PATCH(?)
    • Verbos: GET Obter informação sobre um recurso. Este verbo não afecta o estado do recurso. Verbo endpoint descrição GET /api/books/ Lista todos os livros GET /api/books/?limit=2&offset=10 Lista livros usando paginação GET /api/books/author=John doe Pesquisa livros pelo nome do autor GET /api/books/9780199535569/ Detalhes de um livro
    • Verbos: GET Pedido Resposta { "total": 20, GET /api/books/?limit=2&offset=10 "items": [ { "isbn": "9780199535569", "name": "Pride and Prejudice" }, { "isbn": "9780199535569", "name": "Pride and Prejudice" } ] }
    • Verbos: GET Pedido Resposta Http 1.1 200 OK GET /api/books/9780199535569/ { "isbn" : "9780199535569", "name" : "Pride and Prejudice", "publication_date" : "2009” }
    • Verbos: POST Cria um novo recurso. Verbo POST endpoint /api/books/ descrição Adiciona um novo livro
    • Verbos: POST Pedido Resposta POST /api/books/ Http 1.1 201 Created { { "name" : "My Book" "isbn" : "9999999999991", } "name" : "My Book" }
    • Verbos: PUT Modifica ou adiciona um recurso expecifico. Verbo PUT endpoint /api/books/9780199535569/ descrição Altera ou adiciona o recurso
    • Verbos: PUT Pedido Resposta PUT /api/books/9999999999991/ { { "name" : "My Book 2" "name" : "My Book 2" } }
    • Verbos: DELETE Apaga um recurso. Verbo DELETE endpoint /api/books/9780199535569/ descrição Apaga o recurso
    • Verbos: DELETE Pedido Resposta DELETE /api/books/9999999999991/ Status 200
    • Verbos: HEAD Verifica se um recurso existe. Verbo HEAD endpoint /api/books/9780199535569/ descrição Verifica se um recurso existe
    • Verbos: HEAD Pedido Resposta HEAD /api/books/9780199535569/ Status 200
    • Verbos: PATCH Modifica parcialmente um recurso. http://www.rfc-editor.org/info/rfc5789 (Status: PROPOSED STANDARD) Verbo PATCH endpoint /api/books/9780199535569/ descrição Altera apenas algumas propriedades do recurso.
    • Verbos: PATCH Pedido Resposta PATCH /api/books/9780199535569/ { { "name" : "My Book 2", "publication_date" : "2008” } "publication_date" : "2008” }
    • Verbos: OPTIONS Obtem metada sobre o recurso.
    • HTTP Status Code 1xx, 2xx , 3xx, 4xx, 5xx
    • Http Status Code
    • Http Status Code ● 2xx - Sucesso ● 4xx - Erro (Client side) ● 5xx - Erro (Server side)
    • Http Status Code : Exemplos ● ● ● ● ● ● 200 Ok 400 Bad Request 404 Not Found 401 Unauthorized 403 Forbidden 500 Internal Server Error
    • Error Handling
    • Error Handling
    • Error codes ● ● ● ● ● Usar sempre um código HTTP adequado Códigos de erro categorizados Mensagem de erro Link para a documentação Identificador unico do pedido ○ Debug
    • Error codes Certo { Errado { "error": 1345 "message" : "Invalid ISBN code" "details" :"https://books.com/doc/errors/1345" “id” : 12398231987312 } "error": 1345 }
    • Cache
    • Cache ● Suporte para cache no protocolo ● Server Cache vs Client Cache ● Cache Headers ○ Cache-Control ○ Last-Modified ○ Etag
    • Cache: Client Cache (Cache-Control)
    • Cache: Client Cache (Last-Modified)
    • Cache: Client Cache (Etag)
    • Cache: Server Cache
    • Cache: Cache-Control ● ● ● Cache-control: public ○ means the cached version can be saved by proxies and other intermediate servers, where everyone can see it. Cache-control: private ○ means the file is different for different users (such as their personal homepage). The user’s private browser can cache it, but not public proxies. Cache-control: no-cache ○ means the file should not be cached. This is useful for things like search results where the URL appears the same but the content may change.
    • Autenticação
    • Autenticação 1. ● ● 2. Utilização do header de autenticação. (Authorization) Basic Authentication ○ Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ= Custom Authentication Scheme (Amazon AWS) ○ Authorization: AWS AKIAIOSFODNN7EXAMPLE:frJIUN8DYpKDtOLCwo//yllqDzg= Utilização de certificado de cliente (SSL)
    • Content Type
    • Content Type ● JSON ○ Performance ○ Simplicidade ○ Dynamic Language (PHP,JS) ● XML ○ More tools ○ More features ○ Static language (Java,C#)
    • Content Type Certo GET /api/books/9780199535569 Accept: application/json Errado GET /api/books/9780199535569.json GET /api/books/9780199535569.xml GET /api/books/9780199535569 Accept: application/xml GET /api/books/9780199535569 Accept: application/epub+zip GET /api/books/9780199535569?type=json
    • Versionamento
    • Versionamento Certo GET /api/v10/books/9780199535569 Errado GET /api/books/9780199535569?v=10 GET /api/books/9780199535569 X-API-Version : 10
    • Concorrência
    • Concorrência Problema: 2 clientes tentam modificar o recurso simultaneamente. Como garantir que as alterações não se sobrepõem? Solução: Etag
    • Concorrência
    • WADL Web Application Description Language
    • WADL ● “The Web Application Description Language (WADL) is a machine-readable XML description of HTTP-based web applications (typically REST web services).” - Wikipedia ● Semelhante ao WSDL
    • WADL <application xmlns="http://wadl.dev.java.net/2009/02"> <resources base="https://books.com/api"> <resource path="books"> <method name="GET"> <request> <param name="limit" required="false" default="30" style="query"/> <param name="offset" required="false" default="0" style="query"/> </request> </method> <resource path="{isbn}"> <param required="true" style="template" name="isbn"/> <method name="GET"/> <method name="DELETE"/> </resource> </resource> </resources> </application>
    • Outros ● Compressão “out of the box” ○ Gzip
    • Hypermedia API
    • FIM