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

RESTful API @ Front-End Developers Taiwan 2014-04-23

94575b73a05d48e567423d7d6ca8273c?s=47 Poga Po
April 24, 2014

RESTful API @ Front-End Developers Taiwan 2014-04-23

94575b73a05d48e567423d7d6ca8273c?s=128

Poga Po

April 24, 2014
Tweet

More Decks by Poga Po

Other Decks in Programming

Transcript

  1. REST Open Data, URI, and REST API @devpoga Front-End Developers

    Taiwan 2014.04.23
  2. @devpoga

  3. REpresentational State Transfer • Resource and Representation • Manipulation through

    Representation • Self-Descriptive • Links between Resources
  4. 先別管 REST API 了 ! 你有聽過 鄉⺠民 OCR 嗎

  5. 陽光法案 • 陽光法案 • 公職⼈人員財產申報法 • 政治獻⾦金法 • 遊說法 •

    … • 2005 年
  6. 政治獻金數位化 • 《政治獻⾦金會計報告書查閱收費標準》 • 可以前往監察院查閱會計報告 • …需要事前預約 • …查詢⼀一個專⼾戶 20

    元 • …不能以電⼦子檔格式攜出 • …影印⼀一張 2 元
  7. 反核四五六運動++

  8. ronnywang++

  9. 鄉民 OCR

  10. cells.1100.json

  11. Let’s make a REST API

  12. 1. Thinking in Resources 2. HTTP Verb 3. Links between

    Resources
  13. Resource • 提供的資料名稱 • 政治獻⾦金表

  14. gov.tw/campaign-finances/ /政府/政治獻⾦金/ { 8: {“張慶忠”: […]}, {“林鴻池”:[…]},…], 7: […], …}

    Resource
  15. gov.tw/campaign-finances/張慶忠/ /政府/政治獻⾦金/張慶忠/ [ { ⽇日期 :”100/12/03”, 捐贈者:”匿名”, 種類 :”個⼈人捐贈收⼊入”, ⾦金額

    :12345 }, { … }, …] Resource Entry
  16. gov.tw/legislators/ /政府/⽴立法委員/ { 8: { KMT: [“張慶忠”, “林鴻池”,…] }, {

    DPP: […] }, … } Resource
  17. gov.tw/legislators/張慶忠/ /政府/⽴立法委員/張慶忠/ { 姓名: “張慶忠” 黨籍: “KMT”, 選區: “新北市”, 參與院會紀錄:

    {…}, 聯絡⽅方式: { TEL: ‘…’, 地址: ‘…’ }, 經歷: [ … ] } Resource Entry
  18. gov.tw/財產申報紀錄/張慶忠/ /政府/財產申報紀錄/張慶忠/ { 股票⾯面額總額: “兩億多很多”, ⼟土地持有總⾯面積: “8245.5坪”, … } Resource

    Entry
  19. gov.tw/投票紀錄/張慶忠/ /政府/投票紀錄/張慶忠/ { 沒有投票: 7, 贊成: 79, 反對: 271, 紀錄:

    [ { 表決內容: 交通資訊雲端blahblah, 個⼈人投票: 贊成, 表決結果: 通過, ⽇日期: 2014-01-27 }, … ] } Resource Entry
  20. 蔡正元:「我違反黨紀第三名」

  21. gov.tw/脫黨表決紀錄/蔡正元/ /政府/脫黨表決紀錄/蔡正元/ { 脫黨投票紀錄: [] } Resource Entry

  22. gov.tw/legislators gov.tw/legislators/張慶忠/ gov.tw/campaign-fianaces/ gov.tw/campaign-fianaces/林鴻池

  23. gov.tw/legislators gov.tw/legislators/張慶忠/ gov.tw/campaign-fianaces/ gov.tw/campaign-fianaces/林鴻池 http:// http:// http:// http://

  24. None
  25. None
  26. Q?

  27. 1. Thinking in Resources 2. HTTP Verb 3. Links between

    Resources
  28. gov.tw/legislators gov.tw/legislators/張慶忠/ gov.tw/campaign-fianaces/ gov.tw/campaign-fianaces/林鴻池 http:// http:// http:// http://

  29. Create Read Update Delete

  30. Create Read Update Delete gov.tw/legislators/張慶忠/

  31. Create Read Update Delete POST GET PUT DELETE HTTP Verb

  32. POST GET PUT DELETE gov.tw/legislators/張慶忠/

  33. POST GET PUT DELETE gov.tw/legislators/張慶忠/ gov.tw/legislators/張慶忠/ gov.tw/legislators/張慶忠/ gov.tw/legislators/

  34. Z > B • 設計好 URL,新增/修改/刪除的介⾯面也⾃自動定義好了 • 更新介⾯面⼀一致 • http://gov.tw/create_legislator.php?name=…

    • http://gov.tw/legislator_delete.php?name=…
  35. Q?

  36. 1. Thinking in Resources 2. HTTP Verb 3. Links between

    Resources
  37. gov.tw/legislators/張慶忠/ { 姓名: “張慶忠” 黨籍: “KMT”, 選區: “新北市”, 參與院會紀錄: {…},

    聯絡⽅方式: { TEL: ‘…’, 地址: ‘…’ }, 經歷: [ … ] } 投票紀錄? 財產紀錄? 選舉得票紀錄? GET
  38. 超連結

  39. gov.tw/legislators/張慶忠/ { 姓名: “張慶忠” 黨籍: “KMT”, 選區: “新北市”, 參與院會紀錄: {…},

    聯絡⽅方式: { TEL: ‘…’, 地址: ‘…’ }, 經歷: [ … ], 投票紀錄: “/投票紀錄/張慶忠/”, 財產紀錄: “/財產紀錄/張慶忠/” }
  40. HATEOAS • Hypermedia as the Engine of Application State •

    直接在 Representation 中建⽴立 Resource 之間的連 結,⽽而不是透過外部⽂文件 • Decoupling Server and Client.
  41. gov.tw/legislators/張慶忠/ { 姓名: “張慶忠” 黨籍: “KMT”, 選區: “新北市”, 參與院會紀錄: {…},

    聯絡⽅方式: { TEL: ‘…’, 地址: ‘…’ }, 經歷: [ … ], 投票紀錄: “/投票紀錄/張慶忠/”, 財產紀錄: “/財產紀錄/張慶忠/”, 罷免: “/recalls/張慶忠” }
  42. RESTful • 從資源的⾓角度思考 • 套上 HTTP Verb 就有標準的操作介⾯面 • 透過

    link 建⽴立資料間的關聯 RECAP
  43. Q?

  44. PgREST Javascript and REST API in your DB http://pgre.st

  45. PgREST is… • … a JSON document store • …

    running inside PostgreSQL • … working with existing relational data • … capable of loading Node.js modules • … compatible with MongoLab’s REST API • … compatible with Firebase API (new)
  46. From Data… 姓名 電話 黨籍 0 張慶忠 02-123-4567 KMT 1

    林鴻池 02-123-4567 KMT 2 ⺩王⾦金平 02-123-4567 KMT 3 柯建銘 02-123-4567 DPP Table: legislators
  47. … to REST API http://localhost:3000/collections/legislators [ { id: 0, 姓名:

    柯建銘 … }, { … }, … ] > pgrest —db mydb
  48. … with query http://localhost:3000/collections/legislators?q={id:0} … RESTful http://localhost:3000/collections/legislators GET POST PUT

    DELETE
  49. http://pgre.st

  50. Thank you!