50
REST Open Data, URI, and REST API @devpoga Front-End Developers Taiwan 2014.04.21

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

  • Upload
    poga-po

  • View
    3.599

  • Download
    1

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: RESTful API @ Front-End Developer Taiwan 2014-04-23

RESTOpen Data, URI, and REST API

@devpoga Front-End Developers Taiwan 2014.04.21

Page 2: RESTful API @ Front-End Developer Taiwan 2014-04-23

@devpoga

Page 3: RESTful API @ Front-End Developer Taiwan 2014-04-23

REpresentational State Transfer

• Resource and Representation

• Manipulation through Representation

• Self-Descriptive

• Links between Resources

Page 4: RESTful API @ Front-End Developer Taiwan 2014-04-23

先別管 REST API 了 !

你有聽過 鄉⺠民 OCR 嗎

Page 5: RESTful API @ Front-End Developer Taiwan 2014-04-23

陽光法案• 陽光法案

• 公職⼈人員財產申報法

• 政治獻⾦金法

• 遊說法

• …

• 2005 年

Page 6: RESTful API @ Front-End Developer Taiwan 2014-04-23

政治獻金數位化• 《政治獻⾦金會計報告書查閱收費標準》

• 可以前往監察院查閱會計報告

• …需要事前預約

• …查詢⼀一個專⼾戶 20 元

• …不能以電⼦子檔格式攜出

• …影印⼀一張 2 元

Page 7: RESTful API @ Front-End Developer Taiwan 2014-04-23

反核四五六運動++

Page 8: RESTful API @ Front-End Developer Taiwan 2014-04-23

ronnywang++

Page 9: RESTful API @ Front-End Developer Taiwan 2014-04-23

鄉民 OCR

Page 10: RESTful API @ Front-End Developer Taiwan 2014-04-23

cells.1100.json

Page 11: RESTful API @ Front-End Developer Taiwan 2014-04-23

Let’s make a REST API

Page 12: RESTful API @ Front-End Developer Taiwan 2014-04-23

1. Thinking in Resources

2. HTTP Verb

3. Links between Resources

Page 13: RESTful API @ Front-End Developer Taiwan 2014-04-23

Resource

• 提供的資料名稱

• 政治獻⾦金表

Page 14: RESTful API @ Front-End Developer Taiwan 2014-04-23

gov.tw/campaign-finances//政府/政治獻⾦金/

{ 8: [“張慶忠”, “林鴻池”,…], 7: […], …}

Resource

Page 15: RESTful API @ Front-End Developer Taiwan 2014-04-23

gov.tw/campaign-finances/張慶忠/

/政府/政治獻⾦金/張慶忠/

[ { ⽇日期 :”100/12/03”, 捐贈者:”匿名”, 種類 :”個⼈人捐贈收⼊入”, ⾦金額 :12345 }, { … }, …]

Resource Entry

Page 16: RESTful API @ Front-End Developer Taiwan 2014-04-23

gov.tw/legislators//政府/⽴立法委員/

{ 8: { KMT: [“張慶忠”, “林鴻池”,…] }, { DPP: […] }, … }

Resource

Page 17: RESTful API @ Front-End Developer Taiwan 2014-04-23

gov.tw/legislators/張慶忠//政府/⽴立法委員/張慶忠/

{ 姓名: “張慶忠” 黨籍: “KMT”, 選區: “新北市”, 參與院會紀錄: {…}, 聯絡⽅方式: { TEL: ‘…’, 地址: ‘…’ }, 經歷: [ … ] }

Resource Entry

Page 18: RESTful API @ Front-End Developer Taiwan 2014-04-23

gov.tw/財產申報紀錄/張慶忠//政府/財產申報紀錄/張慶忠/

{ 股票⾯面額總額: “兩億多很多”, ⼟土地持有總⾯面積: “8245.5坪”, … }

Resource Entry

Page 19: RESTful API @ Front-End Developer Taiwan 2014-04-23

gov.tw/投票紀錄/張慶忠//政府/投票紀錄/張慶忠/

{ 沒有投票: 7, 贊成: 79, 反對: 271, 紀錄: [ { 表決內容: 交通資訊雲端blahblah, 個⼈人投票: 贊成, 表決結果: 通過, ⽇日期: 2014-01-27 }, … ] }

Resource Entry

Page 20: RESTful API @ Front-End Developer Taiwan 2014-04-23

蔡正元:「我違反黨紀第三名」

Page 21: RESTful API @ Front-End Developer Taiwan 2014-04-23

gov.tw/脫黨表決紀錄/蔡正元//政府/脫黨表決紀錄/蔡正元/

{ 脫黨投票紀錄: [] }

Resource Entry

Page 22: RESTful API @ Front-End Developer Taiwan 2014-04-23

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

Page 23: RESTful API @ Front-End Developer Taiwan 2014-04-23

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

http://http://http://http://

Page 24: RESTful API @ Front-End Developer Taiwan 2014-04-23
Page 25: RESTful API @ Front-End Developer Taiwan 2014-04-23
Page 26: RESTful API @ Front-End Developer Taiwan 2014-04-23

休息

Page 27: RESTful API @ Front-End Developer Taiwan 2014-04-23

1. Thinking in Resources

2. HTTP Verb

3. Links between Resources

Page 28: RESTful API @ Front-End Developer Taiwan 2014-04-23

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

http://http://http://http://

Page 29: RESTful API @ Front-End Developer Taiwan 2014-04-23

Create Read Update Delete

Page 30: RESTful API @ Front-End Developer Taiwan 2014-04-23

Create Read Update Delete

gov.tw/legislators/張慶忠/

Page 31: RESTful API @ Front-End Developer Taiwan 2014-04-23

Create Read Update Delete

POST GET PUT DELETE

Page 32: RESTful API @ Front-End Developer Taiwan 2014-04-23

POST GET PUT DELETE

gov.tw/legislators/張慶忠/

Page 33: RESTful API @ Front-End Developer Taiwan 2014-04-23

POST GET PUT DELETE

gov.tw/legislators/張慶忠/

gov.tw/legislators/張慶忠/gov.tw/legislators/張慶忠/

gov.tw/legislators/

Page 34: RESTful API @ Front-End Developer Taiwan 2014-04-23

Z > B

• 設計好 URL,新增/修改/刪除的介⾯面也⾃自動定義好了

• 更新介⾯面⼀一致

• http://gov.tw/create_legislator.php?name=…

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

Page 35: RESTful API @ Front-End Developer Taiwan 2014-04-23

休息

Page 36: RESTful API @ Front-End Developer Taiwan 2014-04-23

1. Thinking in Resources

2. HTTP Verb

3. Links between Resources

Page 37: RESTful API @ Front-End Developer Taiwan 2014-04-23

gov.tw/legislators/張慶忠/

{ 姓名: “張慶忠” 黨籍: “KMT”, 選區: “新北市”, 參與院會紀錄: {…}, 聯絡⽅方式: { TEL: ‘…’, 地址: ‘…’ }, 經歷: [ … ] }

投票紀錄? 財產紀錄? 選舉得票紀錄?

GET

Page 38: RESTful API @ Front-End Developer Taiwan 2014-04-23

超連結

Page 39: RESTful API @ Front-End Developer Taiwan 2014-04-23

gov.tw/legislators/張慶忠/

{ 姓名: “張慶忠” 黨籍: “KMT”, 選區: “新北市”, 參與院會紀錄: {…}, 聯絡⽅方式: { TEL: ‘…’, 地址: ‘…’ }, 經歷: [ … ], 投票紀錄: “/投票紀錄/張慶忠/”, 財產紀錄: “/財產紀錄/張慶忠/” }

Page 40: RESTful API @ Front-End Developer Taiwan 2014-04-23

HATEOAS

• Hypermedia as the Engine of Application State

• 直接在 Representation 中建⽴立 Resource 之間的連結,⽽而不是透過外部⽂文件

• Decoupling Server and Client.

Page 41: RESTful API @ Front-End Developer Taiwan 2014-04-23

gov.tw/legislators/張慶忠/{ 姓名: “張慶忠” 黨籍: “KMT”, 選區: “新北市”, 參與院會紀錄: {…}, 聯絡⽅方式: { TEL: ‘…’, 地址: ‘…’ }, 經歷: [ … ], 投票紀錄: “/投票紀錄/張慶忠/”, 財產紀錄: “/財產紀錄/張慶忠/”, 割闌尾: “/recalls/張慶忠” }

Page 42: RESTful API @ Front-End Developer Taiwan 2014-04-23

RESTful

• 從資料的⾓角度思考

• 套上 HTTP Verb 就有免費的操作介⾯面

• 透過 link 建⽴立資料間的關聯

RECAP

Page 43: RESTful API @ Front-End Developer Taiwan 2014-04-23

休息

Page 44: RESTful API @ Front-End Developer Taiwan 2014-04-23

PgRESTJavascript in your DB

http://pgre.st

Page 45: RESTful API @ Front-End Developer Taiwan 2014-04-23

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)

Page 46: RESTful API @ Front-End Developer Taiwan 2014-04-23

From Data…

姓名 電話 黨籍

0 張慶忠 02-123-4567 KMT

1 林鴻池 02-123-4567 KMT

2 ⺩王⾦金平 02-123-4567 KMT

3 柯建銘 02-123-4567 DPP

Table: legislators

Page 47: RESTful API @ Front-End Developer Taiwan 2014-04-23

… to REST API

http://localhost:3000/collections/legislators

[ { id: 0, 姓名: 柯建銘 … }, { … }, … ]

> pgrest —db mydb

Page 48: RESTful API @ Front-End Developer Taiwan 2014-04-23

… with queryhttp://localhost:3000/collections/legislators?q={id:0}

… RESTful

http://localhost:3000/collections/legislatorsGET

POSTPUT

DELETE

Page 49: RESTful API @ Front-End Developer Taiwan 2014-04-23

http://pgre.st

Page 50: RESTful API @ Front-End Developer Taiwan 2014-04-23

Thank you!