rest api's

Post on 21-Feb-2017

87 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

REST APIDos and Dont`s

@abonfiglioAdriano Bonfiglio

What is REST and RESTful APIsHTTP MethodsHTTP Status CodeResources and EndpointsRelationsPaginationDEMOAuthentication

Agenda

SAP Labs Latin AmericaAdriano Bonfiglio

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

The best company to work for in BrazilNamed by Você S/A magazine and Great Place to Work

2015

2015

2015

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

Benefits

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

http://bit.ly/1Qs0Z7a

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

RESTREpresentational

State

Transfer

RESTful

REST Webservice

REST API

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}

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

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

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

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

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

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

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

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

Resources and EnpointsNouns

Plural

Consistent

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

What about Relations?

User

Role

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?

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

What about Pagination?

GET /app/users?fields=name,lastname

Fields

Keep it SimpleGET http://got/hodor

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

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

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

DEMO

Authentication

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

BASIC

Authentication

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

BASIC

AuthenticationDIGEST

AuthenticationOAUTH2

ReferencesRESTful Web APIs – O`REILLY

https://developer.github.com/v3/

https://developers.trello.com/advanced-reference

https://github.com/adrianobonfiglio/rest-api

THANKS!Questions?

top related