Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
RESTful API @ Front-End Developers Taiwan 2014-...
Search
Poga Po
April 24, 2014
Programming
3
140
RESTful API @ Front-End Developers Taiwan 2014-04-23
Poga Po
April 24, 2014
Tweet
Share
More Decks by Poga Po
See All by Poga Po
Spacer - iThome Serverless All-Star
poga
2
260
civic-notebook
poga
0
96
Fuzz Testing and go-fuzz
poga
0
320
everything is log
poga
12
1.8k
g0v intro
poga
0
84
新聞產生器
poga
0
600
Dependency Management in Go
poga
4
600
Redis: based on real story
poga
16
1.3k
Other Decks in Programming
See All in Programming
AWSで雰囲気でつくる! VRChatの写真変換ピタゴラスイッチ
anatofuz
0
140
Preact、HooksとSignalsの両立 / Preact: Harmonizing Hooks and Signals
ssssota
1
1.4k
フロントエンドテストの育て方
quramy
11
2.9k
DomainException と Result 型で作る型安全なエラーハンドリング
karszawa
0
890
remix + cloudflare workers (DO) docker上でいい感じに開発する
yoshidatomoaki
0
130
MCP世界への招待: AIエンジニアが創る次世代エージェント連携の世界
gunta
4
880
AI Agents with JavaScript
slobodan
0
220
タイムゾーンの奥地は思ったよりも闇深いかもしれない
suguruooki
1
550
Deoptimization: How YJIT Speeds Up Ruby by Slowing Down / RubyKaigi 2025
k0kubun
0
480
PHPバージョンアップから始めるOSSコントリビュート / how2oss-contribute
dmnlk
1
990
小田原でみんなで一句詠みたいな #phpcon_odawara
stefafafan
0
320
マルチアカウント環境での、そこまでがんばらない RI/SP 運用設計
wa6sn
0
710
Featured
See All Featured
Being A Developer After 40
akosma
91
590k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.2k
Unsuck your backbone
ammeep
670
57k
Code Review Best Practice
trishagee
67
18k
Become a Pro
speakerdeck
PRO
27
5.3k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.1k
YesSQL, Process and Tooling at Scale
rocio
172
14k
Navigating Team Friction
lara
184
15k
It's Worth the Effort
3n
184
28k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
32
5.1k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
34
2.2k
Transcript
REST Open Data, URI, and REST API @devpoga Front-End Developers
Taiwan 2014.04.23
@devpoga
REpresentational State Transfer • Resource and Representation • Manipulation through
Representation • Self-Descriptive • Links between Resources
先別管 REST API 了 ! 你有聽過 鄉⺠民 OCR 嗎
陽光法案 • 陽光法案 • 公職⼈人員財產申報法 • 政治獻⾦金法 • 遊說法 •
… • 2005 年
政治獻金數位化 • 《政治獻⾦金會計報告書查閱收費標準》 • 可以前往監察院查閱會計報告 • …需要事前預約 • …查詢⼀一個專⼾戶 20
元 • …不能以電⼦子檔格式攜出 • …影印⼀一張 2 元
反核四五六運動++
ronnywang++
鄉民 OCR
cells.1100.json
Let’s make a REST API
1. Thinking in Resources 2. HTTP Verb 3. Links between
Resources
Resource • 提供的資料名稱 • 政治獻⾦金表
gov.tw/campaign-finances/ /政府/政治獻⾦金/ { 8: {“張慶忠”: […]}, {“林鴻池”:[…]},…], 7: […], …}
Resource
gov.tw/campaign-finances/張慶忠/ /政府/政治獻⾦金/張慶忠/ [ { ⽇日期 :”100/12/03”, 捐贈者:”匿名”, 種類 :”個⼈人捐贈收⼊入”, ⾦金額
:12345 }, { … }, …] Resource Entry
gov.tw/legislators/ /政府/⽴立法委員/ { 8: { KMT: [“張慶忠”, “林鴻池”,…] }, {
DPP: […] }, … } Resource
gov.tw/legislators/張慶忠/ /政府/⽴立法委員/張慶忠/ { 姓名: “張慶忠” 黨籍: “KMT”, 選區: “新北市”, 參與院會紀錄:
{…}, 聯絡⽅方式: { TEL: ‘…’, 地址: ‘…’ }, 經歷: [ … ] } Resource Entry
gov.tw/財產申報紀錄/張慶忠/ /政府/財產申報紀錄/張慶忠/ { 股票⾯面額總額: “兩億多很多”, ⼟土地持有總⾯面積: “8245.5坪”, … } Resource
Entry
gov.tw/投票紀錄/張慶忠/ /政府/投票紀錄/張慶忠/ { 沒有投票: 7, 贊成: 79, 反對: 271, 紀錄:
[ { 表決內容: 交通資訊雲端blahblah, 個⼈人投票: 贊成, 表決結果: 通過, ⽇日期: 2014-01-27 }, … ] } Resource Entry
蔡正元:「我違反黨紀第三名」
gov.tw/脫黨表決紀錄/蔡正元/ /政府/脫黨表決紀錄/蔡正元/ { 脫黨投票紀錄: [] } Resource Entry
gov.tw/legislators gov.tw/legislators/張慶忠/ gov.tw/campaign-fianaces/ gov.tw/campaign-fianaces/林鴻池
gov.tw/legislators gov.tw/legislators/張慶忠/ gov.tw/campaign-fianaces/ gov.tw/campaign-fianaces/林鴻池 http:// http:// http:// http://
None
None
Q?
1. Thinking in Resources 2. HTTP Verb 3. Links between
Resources
gov.tw/legislators gov.tw/legislators/張慶忠/ gov.tw/campaign-fianaces/ gov.tw/campaign-fianaces/林鴻池 http:// http:// http:// http://
Create Read Update Delete
Create Read Update Delete gov.tw/legislators/張慶忠/
Create Read Update Delete POST GET PUT DELETE HTTP Verb
POST GET PUT DELETE gov.tw/legislators/張慶忠/
POST GET PUT DELETE gov.tw/legislators/張慶忠/ gov.tw/legislators/張慶忠/ gov.tw/legislators/張慶忠/ gov.tw/legislators/
Z > B • 設計好 URL,新增/修改/刪除的介⾯面也⾃自動定義好了 • 更新介⾯面⼀一致 • http://gov.tw/create_legislator.php?name=…
• http://gov.tw/legislator_delete.php?name=…
Q?
1. Thinking in Resources 2. HTTP Verb 3. Links between
Resources
gov.tw/legislators/張慶忠/ { 姓名: “張慶忠” 黨籍: “KMT”, 選區: “新北市”, 參與院會紀錄: {…},
聯絡⽅方式: { TEL: ‘…’, 地址: ‘…’ }, 經歷: [ … ] } 投票紀錄? 財產紀錄? 選舉得票紀錄? GET
超連結
gov.tw/legislators/張慶忠/ { 姓名: “張慶忠” 黨籍: “KMT”, 選區: “新北市”, 參與院會紀錄: {…},
聯絡⽅方式: { TEL: ‘…’, 地址: ‘…’ }, 經歷: [ … ], 投票紀錄: “/投票紀錄/張慶忠/”, 財產紀錄: “/財產紀錄/張慶忠/” }
HATEOAS • Hypermedia as the Engine of Application State •
直接在 Representation 中建⽴立 Resource 之間的連 結,⽽而不是透過外部⽂文件 • Decoupling Server and Client.
gov.tw/legislators/張慶忠/ { 姓名: “張慶忠” 黨籍: “KMT”, 選區: “新北市”, 參與院會紀錄: {…},
聯絡⽅方式: { TEL: ‘…’, 地址: ‘…’ }, 經歷: [ … ], 投票紀錄: “/投票紀錄/張慶忠/”, 財產紀錄: “/財產紀錄/張慶忠/”, 罷免: “/recalls/張慶忠” }
RESTful • 從資源的⾓角度思考 • 套上 HTTP Verb 就有標準的操作介⾯面 • 透過
link 建⽴立資料間的關聯 RECAP
Q?
PgREST Javascript and REST API in your DB http://pgre.st
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)
From Data… 姓名 電話 黨籍 0 張慶忠 02-123-4567 KMT 1
林鴻池 02-123-4567 KMT 2 ⺩王⾦金平 02-123-4567 KMT 3 柯建銘 02-123-4567 DPP Table: legislators
… to REST API http://localhost:3000/collections/legislators [ { id: 0, 姓名:
柯建銘 … }, { … }, … ] > pgrest —db mydb
… with query http://localhost:3000/collections/legislators?q={id:0} … RESTful http://localhost:3000/collections/legislators GET POST PUT
DELETE
http://pgre.st
Thank you!