JSON API: Não reinvente a roda

Post on 22-Feb-2017

77 views 0 download

Transcript of JSON API: Não reinvente a roda

pen4education

JSON API: não reinvente a rodaPedro Cavalheiro

Trilha Web

pen4education

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

pen4education

Did I hear API?

pen4education

API• Application Programming Interface

• Web Services (HTTP)• SOAP• REST

• JSON

pen4education

REST API• O que é importante?

• Segurança/Autenticação• Documentação• Requisitos/Complexidade• Design de requisições/respostas• +

pen4education

pen4education

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.

pen4education

pen4education

Did I hear API?

pen4education

Did I hear API?

pen4education

JSON API• O que ele define?

Just kidding!

pen4education

• 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?

pen4education

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

pen4education

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

pen4education

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." } ]}

pen4education

JSON API• Implementação

pen4education

• 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

pen4education

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 :)

pen4education

Dúvidas?

jsonapi.org

pecavalheiro.com

OBRIGADO!