Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Maturidade de APIs REST
Search
Brian Thomas Storti
October 17, 2014
Programming
290
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Maturidade de APIs REST
Brian Thomas Storti
October 17, 2014
More Decks by Brian Thomas Storti
See All by Brian Thomas Storti
Introdução ao Ruby
brianstorti
6
230
Ruby object model e metaprogramação
brianstorti
5
310
Other Decks in Programming
See All in Programming
PHPだって関数型したい 〜できること、できないこと〜 / fp-in-php
jsoizo
1
240
ローカルLLMでどこまでコードが書けるか -縮小版 / How much code can be written on a local LLM Shortened
kishida
2
200
SLOをサービス品質の共通言語にするために 取り組んできたこと
wakana0222
0
540
FDEが実現するAI駆動経営の現在地
gonta
2
190
Claude Team Plan導入・ガイド
tk3fftk
0
220
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
1
610
act2-costs.pdf
sumedhbala
0
120
「正の参照」と 「負の導出」で組む ハーネスエンジニアリング
cottpan
1
150
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
2
900
トークンをケチるな、設計しろ:GitHub Copilotを賢く使うコンテキスト戦略
ochtum
0
330
AWS CDK を「作」ってみた 〜フルスクラッチで見えた CDK の裏側〜 / aws-cdk-from-scratch
gotok365
3
490
任せる範囲はこう広がった / How the Scope of AI Delegation Has Expanded
nrslib
1
270
Featured
See All Featured
[SF Ruby Conf 2025] Rails X
palkan
2
1.2k
Code Reviewing Like a Champion
maltzj
528
40k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Music & Morning Musume
bryan
47
7.3k
Raft: Consensus for Rubyists
vanstee
141
7.6k
Making Projects Easy
brettharned
120
6.7k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
45k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Mind Mapping
helmedeiros
PRO
1
290
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1k
Believing is Seeing
oripsolob
1
170
Transcript
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
O QUE É REST ? 2
MODELO DE MATURIDADE Leonard Richardson, 2008 3
MODELO DE MATURIDADE 4
NIVEL 0 Uma URL e um método HTTP 5
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>
NIVEL 1 Várias URLs e um método HTTP 7
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/>
NIVEL 2 Uso adequado do HTTP 9
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 NIVEL 3 Hypermedia
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"/>
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>
"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
MUITO BONITO, MAS Por que não existem muitos serviços nível
3? 15
HAL+JSON 16
HAL+JSON 17
MODELO DE MATURIDADE 18 Uma URL, um método HTTP Várias
URLs, um método HTTP Uso adequado do HTTP Hypermedia
BOAS PRÁTICAS 19
CONHECERÁS TEUS VERBOS Saiba o que sua aplicação está dizendo
20
21 RFC 2616
MÉTODOS HTTP ▫︎GET - Leitura ▫︎DELETE - Remoção ▫︎POST -
Criação ▫︎PUT - Atualização 22
23 RFC 2616
"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
NÃO PERDERÁS TEMPO Cache 25
A requisição mais rápida é a requisição que não é
feita. 26
DIRÁS A VERDADE 27
STATUS CODE ▫︎1xx - Informação ▫︎2xx - Sucesso ▫︎3xx -
Redirecionamento ▫︎4xx - Erro do cliente ▫︎5xx - Erro do servidor 28
DIRÁS A VERDADE 29
ABRAÇARÁS A WEB 30
Brian Storti www.brianstorti.com
[email protected]
! Pedro Vereza www.pedrovereza.com
[email protected]
OBRIGADO