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

Maturidade de APIs REST

Maturidade de APIs REST

Brian Thomas Storti

October 17, 2014
Tweet

More Decks by Brian Thomas Storti

Other Decks in Programming

Transcript

  1. T h e D e v e l o p

    e r s C o n f e r e n c e 2 0 1 4 MATURIDADE DE APIS REST Brian Storti Pedro Vereza
  2. NIVEL 0 ▫︎Um método HTTP ▫︎Uma URL ▫︎Tudo no payload

    ▫︎Independe do formato ▫︎SOAP 6 POST /tdcService 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>
  3. NIVEL 1 ▫︎Um método HTTP ▫︎Várias URLs ▫︎URI Tunneling ▫︎HTTP

    como camada de transporte 8 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/>
  4. NIVEL 2 ▫︎Várias URLs ▫︎Uso adequado dos métodos HTTP (RFC

    2616) 10 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
  5. NIVEL 3 ▫︎Hypermedia ▫︎Hypermedia ▫︎Hypermedia 12 GET /openSlots HTTP/1.1 HTTP/1.1

    200 OK <openSlotResponse> <link href="api.tdc.com/slot/1" rel = "reserve.slot" > <slot id=1 start="1655" end="1710"> <trilha id="arquitetura"/> </slot> <openSlotResponse/> GET api.tdc.com/ HTTP/1.1 200 OK <link href= "api.tdc.com/openSlots" rel= "open.slots"/> ! <link href= "api.tdc.com/slots" rel= "all.slots"/>
  6. NETFLIX 13 <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>
  7. "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 14
  8. MODELO DE MATURIDADE 18 Uma URL, um método HTTP Várias

    URLs, um método HTTP Uso adequado do HTTP Hypermedia
  9. "Se a URL requisitada não aponta para um recurso existente,

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

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