rest api's
TRANSCRIPT
![Page 1: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/1.jpg)
REST APIDos and Dont`s
@abonfiglioAdriano Bonfiglio
![Page 2: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/2.jpg)
What is REST and RESTful APIsHTTP MethodsHTTP Status CodeResources and EndpointsRelationsPaginationDEMOAuthentication
Agenda
![Page 3: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/3.jpg)
SAP Labs Latin AmericaAdriano Bonfiglio
![Page 4: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/4.jpg)
300,000customers in 190 countries
More than
76,500employees and offices in 130 countries
More than
€ 20,8billionin 2015
Annual revenue of
A 44-year history of innovation and growth as a true industry leader
![Page 5: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/5.jpg)
The best company to work for in BrazilNamed by Você S/A magazine and Great Place to Work
2015
2015
2015
![Page 6: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/6.jpg)
Multi-cultural environmentTraining (+24 hours/year/employee)Competitive compensation policyFlexible working timeFlexible benefitsSAP BusFree drinks & snacks
Benefits
![Page 7: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/7.jpg)
Bachelor degree in progress or complete
IT Technical knowledge
Business process knowledge
Advanced English skills
Spanish skills (plus)
Passion for innovation
Team player
How to work @ SAP
![Page 8: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/8.jpg)
http://bit.ly/1Qs0Z7a
Join our talent community!And get to know about our opportunities
![Page 9: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/9.jpg)
RESTREpresentational
State
Transfer
![Page 10: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/10.jpg)
RESTful
REST Webservice
![Page 11: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/11.jpg)
REST API
![Page 12: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/12.jpg)
REST API v1router.get("/app/users/findAll", userController.list);
response: {message: ok, results:[...]}
router.get("/app/user/findOne/:id", userController.findOne);response: {message: ok, results:{}}
router.post("/app/user/update/:id", userController.update);response: {message: ok, results:{}}
router.post("/app/user/save", userController.save);response: {message: ok, results:{}}
router.get("/app/user/delete/:id", userController.remove);response: {message: ok}
![Page 13: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/13.jpg)
router.get("/app/users/findAll", userController.list);response: {message: ok, results:[...]}
router.get("/app/user/findOne/:id", userController.findOne);response: {message: ok, results:{}}
router.post("/app/user/update/:id", userController.update);response: {message: ok, results:{}}
router.post("/app/user/save", userController.save);response: {message: ok, results:{}}
router.get("/app/user/delete/:id", userController.remove);response: {message: ok}
FIRST PROBLEM
REST API v1
![Page 14: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/14.jpg)
HTTP MethodsGETPOST
get a representation of a resource
create a new resource
PUT update a resource
PATCH update part of a resource
DELETE delete a resource
![Page 15: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/15.jpg)
router.get("/app/users/findAll", userController.list);response: {message: ok, results:[...]}
router.get("/app/user/findOne/:id", userController.findOne);response: {message: ok, results:{}}
router.put("/app/user/update/:id", userController.update);response: {message: ok, results:{}}
router.post("/app/user/save", userController.save);response: {message: ok, results:{}}
router.delete("/app/user/delete/:id", userController.remove);response: {message: ok}
REST API v2
![Page 16: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/16.jpg)
router.get("/app/users/findAll", userController.list);response: {message: ok, results:[...]}
router.get("/app/user/findOne/:id", userController.findOne);response: {message: ok, results:{}}
router.put("/app/user/update/:id", userController.update);response: {message: ok, results:{}}
router.post("/app/user/save", userController.save);response: {message: ok, results:{}}
router.delete("/app/user/delete/:id", userController.remove);response: {message: ok}
SECOND PROBLEM
REST API v2
![Page 17: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/17.jpg)
HTTP Status2xx Success
3xx Redirection
200: Ok201: Created204: No content
304: Not modified
4xx Client Error 404: Not Found, 400: Bad Request,401: Unauthorized, 403: Forbidden,405: Method not allowed, 422: Unprocessable Entity
![Page 18: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/18.jpg)
router.get("/app/users/findAll", userController.list);response: HTTP1.1 200 OK {message: “”, results:[...]}
router.get("/app/user/findOne/:id", userController.findOne);response: HTTP1.1 200 OK {message: ok, results:{}}
router.put("/app/user/update/:id", userController.update);response: HTTP1.1 200 OK {message: “”, results:{}}
router.post("/app/user/save", userController.save);response: HTTP1.1 201 Created {message: “”, results:{}}
router.delete("/app/user/delete/:id", userController.remove);response: HTTP1.1 204 No Content
REST API v3
![Page 19: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/19.jpg)
router.get("/app/users/findAll", userController.list);response: HTTP1.1 200 OK {message: “”, results:[...]}
router.get("/app/user/findOne/:id", userController.findOne);response: HTTP1.1 200 OK {message: ok, results:{}}
router.put("/app/user/update/:id", userController.update);response: HTTP1.1 200 OK {message: “”, results:{}}
router.post("/app/user/save", userController.save);response: HTTP1.1 201 Created {message: “”, results:{}}
router.delete("/app/user/delete/:id", userController.remove);response: HTTP1.1 204 No Content
REST API v3
![Page 20: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/20.jpg)
router.get("/app/users/findAll", userController.list);response: HTTP1.1 200 OK {message: “”, results:[...]}
router.get("/app/user/findOne/:id", userController.findOne);response: HTTP1.1 200 OK {message: ok, results:{}}
router.put("/app/user/update/:id", userController.update);response: HTTP1.1 200 OK {message: “”, results:{}}
router.post("/app/user/save", userController.save);response: HTTP1.1 201 Created {message: “”, results:{}}
router.delete("/app/user/delete/:id", userController.remove);response: HTTP1.1 204 No Content
REST API v3
THIRD PROBLEM
![Page 21: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/21.jpg)
Resources and EnpointsNouns
Plural
Consistent
![Page 22: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/22.jpg)
router.get("/app/users/", userController.list);response: HTTP1.1 200 OK {message: “”, results:[...]}
router.get("/app/users/:id", userController.findOne);response: HTTP1.1 200 OK {message:””, results:{}}
router.put("/app/users/:id", userController.update);response: HTTP1.1 200 OK {message: “”, results:{}}
router.post("/app/users/", userController.save);response: HTTP1.1 201 Created {message: “”, results:{}}
router.delete("/app/users/:id", userController.remove);response: HTTP1.1 204 No Content
REST API v4
![Page 23: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/23.jpg)
What about Relations?
User
Role
![Page 24: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/24.jpg)
router.get("/app/users/:id/roles", userController.findAll);response: HTTP1.1 200 OK {message:””, results:{}}
router.get("/app/users/:id/roles/:roleId", userController.findOne);response: HTTP1.1 200 OK {message:””, results:{}}
router.put("/app/users/:id/roles/:roleId", userController.update);response: HTTP1.1 200 OK {message: “”, results:{}}
router.post("/app/users/:id/roles", userController.save);response: HTTP1.1 201 Created {message: “”, results:{}}
router.delete("/app/users/:id/roles/:id", userController.remove);response: HTTP1.1 204 No Content
What about Relations?
![Page 25: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/25.jpg)
GET /app/users?page=1&order=desc&sort=name
What about Pagination?
![Page 26: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/26.jpg)
GET /app/users?fields=name,lastname
Fields
![Page 27: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/27.jpg)
Keep it SimpleGET http://got/hodor
Respose:HTTP1.1 200 OK{ “message”:”hodor”}
![Page 28: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/28.jpg)
GET http://localhost://users/1
Respose:HTTP1.1 200 OK{ “c_id”:”1”, “c_interna_id”:”12132”, “c_Name”:”foo”, “c_lastName”:”barr”, “c_structure”: {
“reference”:”32434”,“code”:”2454435”,
}, “c: last_modified”: “02-29-2016”}
Keep it clear & clean
![Page 29: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/29.jpg)
GET http://localhost://users/1
Respose:HTTP1.1 200 OK{ “id”:”1”, “name”:”foo”, “lastName”:”barr”, “last_modified”: “02-29-2016”}
Keep it clear & clean
![Page 30: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/30.jpg)
DEMO
![Page 31: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/31.jpg)
Authentication
GET / HTTP/1.1Host: example.orgAuthorization: Basic Zm9vOmJhcg=
BASIC
![Page 32: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/32.jpg)
Authentication
GET / HTTP/1.1Host: example.orgAuthorization: Basic Zm9vOmJhcg=
BASIC
![Page 33: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/33.jpg)
AuthenticationDIGEST
![Page 34: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/34.jpg)
AuthenticationOAUTH2
![Page 35: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/35.jpg)
ReferencesRESTful Web APIs – O`REILLY
https://developer.github.com/v3/
https://developers.trello.com/advanced-reference
https://github.com/adrianobonfiglio/rest-api
![Page 36: Rest API's](https://reader035.vdocuments.mx/reader035/viewer/2022062400/58ac12e61a28ab33178b5e99/html5/thumbnails/36.jpg)
THANKS!Questions?