Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
RESTful API @ Front-End Developers Taiwan 2014-...
Search
Poga Po
April 24, 2014
Programming
220
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
RESTful API @ Front-End Developers Taiwan 2014-04-23
Poga Po
April 24, 2014
More Decks by Poga Po
See All by Poga Po
Spacer - iThome Serverless All-Star
poga
2
320
civic-notebook
poga
0
120
Fuzz Testing and go-fuzz
poga
0
400
everything is log
poga
12
1.9k
g0v intro
poga
0
120
新聞產生器
poga
0
700
Dependency Management in Go
poga
4
680
Redis: based on real story
poga
16
1.4k
Other Decks in Programming
See All in Programming
数年滞っていたダークモード対応をおよそ2週間で完了させる
chigichan24
0
700
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
130
From 6 People Classroom Meetup to 100 People Regional Conference / FOSS4G Hiroshima 2026
furukawayasuto
0
130
ソフトウェアラスタライザ
fadis
1
800
Laravelのアプリケーションをどこにデプロイするか #ツナギメオフライン.9
akase244
0
120
RSSとCodexを使ってX投稿自動化してみた
ochtum
0
110
型解析で実現する Go の言語内 DSL / Conference に Go! タイムテーブルの歩き方 for Gophers
mazrean
0
140
Claude Codeを組織的に動かして月400PRを実現した話
happy_ryo
0
270
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
240
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
4.4k
AIとGame Jamで、ゲームを完成させた話
takahirosaeki
0
120
Seeing Through Serverless: Observability for AWS Lambda with ADOT and CloudWatch Application Signals
seike460
PRO
1
130
Featured
See All Featured
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
530
Context Engineering - Making Every Token Count
addyosmani
9
1.1k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Navigating Weather and Climate Data
rabernat
0
510
Everyday Curiosity
cassininazir
0
310
Being A Developer After 40
akosma
91
590k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
500
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
500
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
990
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
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!