"API Design at GitHub". Jason Rudolph, GitHub
-
Upload
yandex -
Category
Technology
-
view
6.148 -
download
3
description
Transcript of "API Design at GitHub". Jason Rudolph, GitHub
![Page 1: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/1.jpg)
![Page 2: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/2.jpg)
API
Designat GitHub
![Page 3: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/3.jpg)
@jasonrudolph
![Page 4: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/4.jpg)
stability and agility
![Page 5: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/5.jpg)
stability
![Page 6: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/6.jpg)
![Page 7: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/7.jpg)
Humble Beginnings
{ "rate": { "limit": 5000, "remaining": 4992 }}
$ curl https://api.github.com/rate_limit
![Page 8: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/8.jpg)
![Page 9: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/9.jpg)
{ "rate": { "limit": 5000, "remaining": 4992 }}
Some Change is EasyGET /rate_limit
![Page 10: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/10.jpg)
{ "rate": { "limit": 5000, "remaining": 4992 }}
Some Change is EasyGET /rate_limit
{ "rate": { "limit": 5000, "remaining": 4992, "reset": 1379363338 }}
![Page 11: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/11.jpg)
{ "rate": { "limit": 5000, "remaining": 4992, "reset": 1379363338 }}}
Some Change is EasyGET /rate_limit
![Page 12: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/12.jpg)
not all requests are created equally
![Page 13: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/13.jpg)
{ "rate": { "limit": 5000, "remaining": 4992, "reset": 1379363338 }}}
Wither AssumptionsGET /rate_limit
![Page 14: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/14.jpg)
{ "rate": { "limit": 5000, "remaining": 4992, "reset": 1379363338 }}}
Wither AssumptionsGET /rate_limit
![Page 15: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/15.jpg)
{ "rate": { "limit": 5000, "remaining": 4992, "reset": 1379363338 }}}
Wither AssumptionsGET /rate_limit
{ "resources": { "core": { "limit": 5000, "remaining": 4992, "reset": 1379363338 }, "search": { "limit": 20, "remaining": 19, "reset": 1379361676 } }}
![Page 16: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/16.jpg)
{ "rate": { "limit": 5000, "remaining": 4992, "reset": 1379363338 }}}
Wither AssumptionsGET /rate_limit{ "resources": { "core": { "limit": 5000, "remaining": 4992, "reset": 1379363338 }, "search": { "limit": 20, "remaining": 19, "reset": 1379361676 } }}
![Page 17: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/17.jpg)
{ "rate": { "limit": 5000, "remaining": 4992, "reset": 1379363338 }}}
Wither AssumptionsGET /rate_limit{ "resources": { "core": { "limit": 5000, "remaining": 4992, "reset": 1379363338 }, "search": { "limit": 20, "remaining": 19, "reset": 1379361676 } }}
$.get("https://api.github.com/rate_limit", function(data) { console.log(data["rate"]["limit"]);});
![Page 18: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/18.jpg)
CC BY-NC-SA 2.0h!p://flickr.com/photos/ryandonahue/2342354248
![Page 19: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/19.jpg)
{ "resources": { "core": { "limit": 5000, "remaining": 4992, "reset": 1379363338 }, "search": { "limit": 20, "remaining": 19, "reset": 1379361676 } }}
Wither AssumptionsGET /rate_limit
$.get("https://api.github.com/rate_limit", function(data) { console.log(data["rate"]["limit"]);});
Uncaught TypeError: Cannot read property 'limit' of undefined
![Page 20: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/20.jpg)
{ "rate": { "limit": 5000, "remaining": 4992, "reset": 1379363338 }}}
GET /rate_limit
{ "resources": { "core": { "limit": 5000, "remaining": 4992, "reset": 1379363338 }, "search": { "limit": 20, "remaining": 19, "reset": 1379361676 } }}
GET /rate_limit
![Page 21: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/21.jpg)
![Page 22: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/22.jpg)
{ "rate": { "limit": 5000, "remaining": 4992, "reset": 1379363338 }
GET /rate_limit
"resources": { "core": { "limit": 5000, "remaining": 4992, "reset": 1379363338 }, "search": { "limit": 20, "remaining": 19, "reset": 1379361676 } }}
GET /rate_limit
}}
{
![Page 23: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/23.jpg)
{ "rate": { "limit": 5000, "remaining": 4992, "reset": 1379363338 }
GET /rate_limit
"resources": { "core": { "limit": 5000, "remaining": 4992, "reset": 1379363338 }, "search": { "limit": 20, "remaining": 19, "reset": 1379361676 } }}
,
![Page 24: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/24.jpg)
{ "rate": { "limit": 5000, "remaining": 4992, "reset": 1379363338 }, "resources": { "core": { "limit": 5000, "remaining": 4992, "reset": 1379363338 }, "search": { "limit": 20, "remaining": 19, "reset": 1379361676 } }}
"limit": 5000, "remaining": 4992, "reset": 1379363338
"limit": 5000, "remaining": 4992, "reset": 1379363338
GET /rate_limit
![Page 25: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/25.jpg)
compatible > beautiful
![Page 26: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/26.jpg)
stability
![Page 27: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/27.jpg)
agility
![Page 28: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/28.jpg)
![Page 29: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/29.jpg)
![Page 30: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/30.jpg)
![Page 31: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/31.jpg)
CC BY-NC-SA 2.0h!p://flickr.com/photos/ryandonahue/2342354248
![Page 32: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/32.jpg)
API + agile
?
![Page 33: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/33.jpg)
nobody reads
![Page 34: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/34.jpg)
$ curl https://api.github.com/search/code?q=bacon
Be Explicit
![Page 35: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/35.jpg)
$ curl https://api.github.com/search/code?q=bacon
Be Explicit
{ "message": "If you would like to help us test the Search API during its preview period, you must specify a custom media type in the 'Accept' header. Please see the docs for full details.", "documentation_url": "http://developer.github.com/v3/search#preview-mode"}
=> HTTP/1.1 415 Unsupported Media Type
![Page 36: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/36.jpg)
$ curl https://api.github.com/search/code?q=bacon
Be Explicit
{ "message": "If you would like to help us test the Search API during its preview period, you must specify a custom media type in the 'Accept' header. Please see the docs for full details.", "documentation_url": "http://developer.github.com/v3/search#preview-mode"}
{ "message": "If you would like to help us test the Search API during its preview period, you must specify a custom media type in the 'Accept' header. Please see the docs for full details.", "documentation_url": "http://developer.github.com/v3/search#preview-mode"}
=> HTTP/1.1 415 Unsupported Media Type
![Page 37: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/37.jpg)
{ "message": "If you would like to help us test the Search API during its preview period, you must specify a custom media type in the 'Accept' header. Please see the docs for full details.", "documentation_url": "http://developer.github.com/v3/search#preview-mode"}
$ curl https://api.github.com/search/code?q=bacon
Be Explicit
{ "message": "If you would like to help us test the Search API during its preview period, you must specify a custom media type in the 'Accept' header. Please see the docs for full details.", "documentation_url": "http://developer.github.com/v3/search#preview-mode"}
=> HTTP/1.1 415 Unsupported Media Type
![Page 38: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/38.jpg)
{ "message": "If you would like to help us test the Search API during its preview period, you must specify a custom media type in the 'Accept' header. Please see the docs for full details.", "documentation_url": "http://developer.github.com/v3/search#preview-mode"}
{ "message": "If you would like to help us test the Search API during its preview period, you must specify a custom media type in the 'Accept' header. Please see the docs for full details.", "documentation_url": "http://developer.github.com/v3/search#preview-mode"}
$ curl https://api.github.com/search/code?q=bacon
Be Explicit
=> HTTP/1.1 415 Unsupported Media Type
![Page 39: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/39.jpg)
$ curl https://api.github.com/search/code?q=bacon -H 'Accept: application/vnd.github.preview+json'
“Open Sesame”
![Page 40: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/40.jpg)
{ "total_count": 212550, "items": [ ... ]}
$ curl https://api.github.com/search/code?q=bacon -H 'Accept: application/vnd.github.preview+json'
“Open Sesame”
=> HTTP/1.1 200 OK
![Page 41: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/41.jpg)
measure
![Page 42: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/42.jpg)
![Page 43: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/43.jpg)
evolve
![Page 44: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/44.jpg)
sta!-only
![Page 45: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/45.jpg)
sta!-only public preview
![Page 46: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/46.jpg)
sta!-only public preview stable
![Page 47: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/47.jpg)
sta!-only public preview stableAPI
![Page 48: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/48.jpg)
sta!-only public preview stableAPI
sta!-only publicBrowser
![Page 49: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/49.jpg)
agility
![Page 50: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/50.jpg)
stability agility
![Page 51: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/51.jpg)
stability agility
![Page 52: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/52.jpg)
![Page 53: "API Design at GitHub". Jason Rudolph, GitHub](https://reader034.fdocuments.us/reader034/viewer/2022042512/554f8d19b4c905d25b8b4f95/html5/thumbnails/53.jpg)