Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Maturidade de APIs REST

Maturidade de APIs REST

Pedro Vereza

March 21, 2015
Tweet

More Decks by Pedro Vereza

Other Decks in Technology

Transcript

  1. C o m p u t e r o n

    t h e B e a c h MATURIDADE DE APIS REST Brian Storti Pedro Vereza
  2. O QUE É REST? ▫︎Recurso ▫︎Algo importante o suficiente para

    ser referenciado ▫︎Entidades ▫︎Representação ▫︎O estado de um recurso em determinado momento ▫︎REST ▫︎Não é um framework ▫︎Não é um protocolo ▫︎É um estilo arquitetural 3
  3. NIVEL 0 ▫︎Um método HTTP ▫︎Uma URL ▫︎Tudo no payload

    ▫︎Independe do formato ▫︎SOAP 7 POST /eventoService HTTP/1.1 <openSlotRequest trilha = "arquitetura" data = "16-10-2014" duracao = "15"/> HTTP/1.1 200 OK <openSlotList> <slot start = "1655" end = "1710"> <trilha id = "arquitetura"/> </slot> </openSlotList> POST /eventoService HTTP/1.1 <reserveSlotRequest trilha = "arquitetura" data = "16-10-2014" duracao = “15" nome = "Maturidade de APIs REST"/>
  4. NIVEL 1 ▫︎Um método HTTP ▫︎Várias URLs ▫︎URI Tunneling ▫︎HTTP

    como camada de transporte 9 POST /getOpenSlots HTTP/1.1 <openSlotRequest trilha = "arquitetura" data = "16-10-2014" duracao = "15"/> POST /reserveSlot? trilha=arquitetura&date=16-10-2014 &nome=Maturidade-API-REST HTTP/1.1 HTTP/1.1 200 OK <openSlotResponse> <slot start = "1655" end = "1710"> <trilha id = "arquitetura"/> </slot> <openSlotResponse/>
  5. NIVEL 2 ▫︎Várias URLs ▫︎Uso adequado dos métodos HTTP (RFC

    2616) 11 GET /openSlots? trilha=arquitetura&data=16-10-2014 &duracao=15 HTTP/1.1 POST /reserveSlot? trilha=arquitetura&date=16-10-2014 &nome=Maturidade-API-REST HTTP/1.1 HTTP/1.1 200 OK <openSlotResponse> <slot start = "1655" end = "1710"> <trilha id = "arquitetura"/> </slot> <openSlotResponse/> HTTP/1.1 201 Created Location: /palestras/1234
  6. NIVEL 3 ▫︎Hypermedia ▫︎Hypermedia ▫︎Hypermedia 13 GET /openSlots HTTP/1.1 HTTP/1.1

    200 OK <openSlotResponse> <link href="api.evento.com/slot/1" rel = "reserve.slot" > <slot id=1 start="1655" end="1710"> <trilha id="arquitetura"/> </slot> <openSlotResponse/> GET api.evento.com HTTP/1.1 200 OK <link href=“api.evento.com/openSlots” rel= "open.slots"/> <link href= "api.evento.com/slots" rel= "all.slots"/>
  7. NETFLIX 14 <catalog_title_index> <title_index_item> <id>http://api-public.netflix.com/catalog/titles/movies/512381</id> <updated>1217404229</updated> <link href="http://api-public.netflix.com/catalog/people/20001977" rel="http://schemas.netflix.com/catalog/person.actor" title="Anna

    Paquin"/> <link href="http://api-public.netflix.com/catalog/people/23599" rel="http://schemas.netflix.com/catalog/person.actor" title="Dana Delany"/> <link href="http://api-public.netflix.com/catalog/people/21741" rel="http://schemas.netflix.com/catalog/person.actor" title="Jeff Daniels"/> <release_year>1996</release_year> <link href="http://www.netflix.com/Movie/Fly_Away_Home/512381" rel="alternate" title="web page"/> <external_ids> <id rel="http://schemas.netflix.com/catalog/id.upc">0043396824393</id> <id rel="http://schemas.netflix.com/catalog/id.upc">0043396060463</id> </external_ids> </title_index_item> </catalog_title_index>
  8. "Se o estado da aplicação não está sendo controlado por

    hypermedia, então ela não pode ser chamada de RESTful. Ponto. Existe algum manual quebrado em algum lugar que precisa ser arrumado?” Roy Fielding, 2008 15
  9. MODELO DE MATURIDADE 19 Uma URL, um método HTTP Várias

    URLs, um método HTTP Uso adequado do HTTP Hypermedia
  10. CARACTERÍSTICAS DE MÉTODOS HTTP ▫︎Idempotência ▫︎Operação pode ser repetida várias

    vezes e sempre terá o mesmo resultado. ▫︎Segurança ▫︎Nenhum efeito colateral é causado. 23
  11. MÉTODOS HTTP 24 Método Idempotente Seguro Uso GET Sim Sim

    Leitura DELETE Sim Não Remoção POST Não Não Criação/Atualização PUT Sim Não Criação/Atualização
  12. “Se a URL requisitada não aponta para um recurso existente,

    e esta URL pode ser definida como um novo recurso, o servidor pode criá-lo nessa URL” RFC 2616 sobre PUT 26
  13. STATUS CODE ▫︎1xx - Informação ▫︎2xx - Sucesso ▫︎3xx -

    Redirecionamento ▫︎4xx - Erro do cliente ▫︎5xx - Erro do servidor 33