rest api's

36
REST API Dos and Dont`s @abonfigli o Adriano Bonfiglio

Upload: adriano-bonfiglio

Post on 21-Feb-2017

86 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Rest API's

REST APIDos and Dont`s

@abonfiglioAdriano Bonfiglio

Page 2: Rest API's

What is REST and RESTful APIsHTTP MethodsHTTP Status CodeResources and EndpointsRelationsPaginationDEMOAuthentication

Agenda

Page 3: Rest API's

SAP Labs Latin AmericaAdriano Bonfiglio

Page 4: Rest API's

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

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

Multi-cultural environmentTraining (+24 hours/year/employee)Competitive compensation policyFlexible working timeFlexible benefitsSAP BusFree drinks & snacks

Benefits

Page 7: Rest API's

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

http://bit.ly/1Qs0Z7a

Join our talent community!And get to know about our opportunities

Page 9: Rest API's

RESTREpresentational

State

Transfer

Page 10: Rest API's

RESTful

REST Webservice

Page 11: Rest API's

REST API

Page 12: Rest API's

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

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

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

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

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

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

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

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

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

Resources and EnpointsNouns

Plural

Consistent

Page 22: Rest API's

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

What about Relations?

User

Role

Page 24: Rest API's

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

GET /app/users?page=1&order=desc&sort=name

What about Pagination?

Page 26: Rest API's

GET /app/users?fields=name,lastname

Fields

Page 27: Rest API's

Keep it SimpleGET http://got/hodor

Respose:HTTP1.1 200 OK{ “message”:”hodor”}

Page 28: Rest API's

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

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

DEMO

Page 31: Rest API's

Authentication

GET / HTTP/1.1Host: example.orgAuthorization: Basic Zm9vOmJhcg=

BASIC

Page 32: Rest API's

Authentication

GET / HTTP/1.1Host: example.orgAuthorization: Basic Zm9vOmJhcg=

BASIC

Page 33: Rest API's

AuthenticationDIGEST

Page 34: Rest API's

AuthenticationOAUTH2

Page 35: Rest API's

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

THANKS!Questions?