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

Hypermedia API (MinskJS version)

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Artem Bey Artem Bey
March 15, 2016
83

Hypermedia API (MinskJS version)

Avatar for Artem Bey

Artem Bey

March 15, 2016
Tweet

Transcript

  1. 3

  2. http://…/resource <xml> <entity/> </xml> { entity: {…} } представление представление

    ресурс идентификатор документ картинка процесс … 8
  3. REST уровня 0 POST /api { "do": "createOrder", "params": {

    "count": 2 } } POST /api { "do": "cancelOrder", "params": { "id": "34xzfha834flksd34" } } 200 OK { "success": true, "res": { "id": "f239sdk237sdf438" } } 200 OK { "success": false, "error": { "code": 666, "message": "because fk u thats why" } } /api 10
  4. REST уровня 1 POST /users {…} 200 OK { "success":

    true, "res": { "id": "f239sdk237sdf438" } } 200 OK { "success": false, "error": { "code": 40000, "message": "not valid req" } } /users POST /users/1 {…} POST /orders {…} /users/1 /orders 11
  5. 15

  6. 400 Bad Request 401 Unauthorized 403 Forbidden 404 Not Found

    402 Payment Required 409 Conflict … 17
  7. /users /orders /profile … GET POST PUT DELETE OPTIONS HEAD

    PATCH … 200 201 … 300 301 … 400 401 … 500 501 … покроют все ваши кейсы 19
  8. GET /feed 200 OK { "data": [ { "title": "...",

    "links": { "details": "http://..." } }, .... ], "links": { "self": "http://...", "first": "http://...", "prev": "http://...", "next": "http://...", "last": "http://..." } } 24 << < > >>
  9. GET /feed?min_id=100500 200 OK { "data": [ { "title": "...",

    "links": { "details": “http://..." } }, .... ], "links": { "self": "http://...", "first": "http://...", "prev": "http://...", "next": "http://...", "last": "http://..." } } 25 << < > >>
  10. GET /films/themartian 200 OK { "data": { "title": "Марсианин", "description":

    "Как Мэт Дэймон выращивал картошку на Марсе", "duration": 140, "poster": "https://s3.amazon.com/buckets/23aGd23asdsf.png" }, "links": { "self": "http://.../themartian", "booking": "http://.../themartian/bookings" } } 26
  11. OPTIONS /films/themartian/bookings 204 No Content Allow: HEAD,GET,POST,OPTIONS 27 GET /films/themartian

    200 OK { "data": { "title": "Марсианин", "description": "Как Мэт Дэймон выращивал картошку на Марсе", "duration": 140, "poster": "https://s3.amazon.com/buckets/23aGd23asdsf.png" }, "links": { "self": "http://.../themartian", "booking": "http://.../themartian/bookings" } }
  12. GET /films/themartian/bookings/1 200 OK { "data": { "count": 3, "date":

    "Tue Nov 03 2015 21:45:55 GMT+0200 (EET)", "status": "waiting" }, "links": { "self": "http://..../bookings/1", "cancel": "http://..../bookings/1/cancel", "pay": "http://.../bookings/1/pay" } } 29
  13. Некоторые приёмы • Безопасные и идемпотентные операции • Кеширование неизменяемых

    ресурсов • X- заголовки • Вендорные типы данных (application/ vnd.myapi.basket.v1+json) 36