Save 37% off PRO during our Black Friday Sale! »

Maturidade de APIs REST

Maturidade de APIs REST

79fd03d805cd5057070f3234ee063845?s=128

Brian Thomas Storti

October 17, 2014
Tweet

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. O QUE É REST ? 2

  3. MODELO DE MATURIDADE Leonard Richardson, 2008 3

  4. MODELO DE MATURIDADE 4

  5. NIVEL 0 Uma URL e um método HTTP 5

  6. 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>
  7. NIVEL 1 Várias URLs e um método HTTP 7

  8. 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/>
  9. NIVEL 2 Uso adequado do HTTP 9

  10. 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
  11. 11 NIVEL 3 Hypermedia

  12. 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"/>
  13. 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>
  14. "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
  15. MUITO BONITO, MAS Por que não existem muitos serviços nível

    3? 15
  16. HAL+JSON 16

  17. HAL+JSON 17

  18. MODELO DE MATURIDADE 18 Uma URL, um método HTTP Várias

    URLs, um método HTTP Uso adequado do HTTP Hypermedia
  19. BOAS PRÁTICAS 19

  20. CONHECERÁS TEUS VERBOS Saiba o que sua aplicação está dizendo

    20
  21. 21 RFC 2616

  22. MÉTODOS HTTP ▫︎GET - Leitura ▫︎DELETE - Remoção ▫︎POST -

    Criação ▫︎PUT - Atualização 22
  23. 23 RFC 2616

  24. "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
  25. NÃO PERDERÁS TEMPO Cache 25

  26. A requisição mais rápida é a requisição que não é

    feita. 26
  27. DIRÁS A VERDADE 27

  28. STATUS CODE ▫︎1xx - Informação ▫︎2xx - Sucesso ▫︎3xx -

    Redirecionamento ▫︎4xx - Erro do cliente ▫︎5xx - Erro do servidor 28
  29. DIRÁS A VERDADE 29

  30. ABRAÇARÁS A WEB 30

  31. Brian Storti www.brianstorti.com brian.storti@thoughtworks.com ! Pedro Vereza www.pedrovereza.com pedro.vereza@thoughtworks.com OBRIGADO