Upload
tdc-globalcode
View
54
Download
2
Embed Size (px)
Citation preview
Globalcode – Open4education
JSON API: não reinvente a rodaPedro Cavalheiro
Trilha Web
Globalcode – Open4education
Pedro CavalheiroDesenvolvedor web há 6 anos, em sua maioria trabalhando com Ruby e PHP. Entusiasta por tecnologia como um todo, adora estudar novas ferramentas, linguagens e metodologias.
Atualmente no Me Salva!.
Infos em pecavalheiro.com
Globalcode – Open4education
Did I hear API?
Globalcode – Open4education
API• Application Programming Interface
• Web Services (HTTP)• SOAP• REST
• JSON
Globalcode – Open4education
REST API• O que é importante?
• Segurança/Autenticação• Documentação• Requisitos/Complexidade• Design de requisições/respostas• +
Globalcode – Open4education
Globalcode – Open4education
bikeshed (noun)• (literally) An enclosed structure where bicycles
may be stored.
• (figuratively, technical jargon) A topic that is
attracting debate ad nauseam, out of all proportion
to its actual importance. Also bikeshedding, the
process of futile investment of time and energy in
discussion of marginal technical issues.
Globalcode – Open4education
Globalcode – Open4education
Did I hear API?
Globalcode – Open4education
Did I hear API?
Globalcode – Open4education
JSON API• O que ele define?
Just kidding!
Globalcode – Open4education
• Como um cliente deve consultar, criar e/ou modificar recursos.
• Verbos• Formato da URL/Filtros• Paginação• +
• Como o servidor deve responder a estas requisições.• Estrutura de resposta• Status Code• +
JSON API• O que ele define?
Globalcode – Open4education
HTTP/1.1 200 OKContent-Type: application/vnd.api+json
{ "data": [{ "type": "articles", "id": "1", "attributes": { "title": "JSON API paints my bikeshed!", "body": "The shortest article. Ever.", "created": "2015-05-22T14:56:29.000Z", "updated": "2015-05-22T14:56:28.000Z" }, "relationships": { "author": { "data": {"id": "42", "type": "people"} } } }], "included": [ { "type": "people", "id": "42", "attributes": { "name": "John", "age": 80, "gender": "male" } } ]}
GET /articles?include=author HTTP/1.1
Globalcode – Open4education
HTTP/1.1 200 OKContent-Type: application/vnd.api+json
{ "meta": { "total-pages": 13 }, "data": [ { "type": "articles", "id": "3", "attributes": { "title": "JSON API paints my bikeshed!", "body": "The shortest article. Ever.", "created": "2015-05-22T14:56:29.000Z", "updated": "2015-05-22T14:56:28.000Z" } } ], "links": { "self": "http://example.com/articles?page[number]=3&page[size]=1", "first": "http://example.com/articles?page[number]=1&page[size]=1", "prev": "http://example.com/articles?page[number]=2&page[size]=1", "next": "http://example.com/articles?page[number]=4&page[size]=1", "last": "http://example.com/articles?page[number]=13&page[size]=1" }}
GET /articles?page[number]=3&page[size]=1 HTTP/1.1
Globalcode – Open4education
HTTP/1.1 422 Unprocessable EntityContent-Type: application/vnd.api+json
{ "errors": [ { "status": "422", "source": { "pointer": "/data/attributes/first-name" }, "title": "Invalid Attribute", "detail": "First name must contain at least three characters." } ]}
Globalcode – Open4education
JSON API• Implementação
Globalcode – Open4education
• Client libraries• JavaScript, iOS, Ruby, PHP, Dart, Perl, Java, Android, R, Elm, .NET
• Server libraries• PHP, Node.js, Ruby, Python, Go, .NET, Java, Scala, Elixir, Haskell,
Perl, Vala
JSON API• Implementação - jsonapi.org/implementations
Globalcode – Open4education
Resumão• Calma! Ajuste uma parte de cada vez
• JSON API não é “lei”, existem outros padrões:
HAL, Siren, JSON-LD, Collection+JSON, etc
• Adote padrões, eles facilitam nossa vida :)
Globalcode – Open4education
Dúvidas?
jsonapi.org
pecavalheiro.com
OBRIGADO!