Restful Fundamentals

Post on 15-Feb-2017

72 views 0 download

Transcript of Restful Fundamentals

REST Fundamentals – Applying HTTP Methods

REST

Representational State Transfer

REST

HTTP + Resource-Oriented Architecture

AGENDA - HTTP

HTTP

RESOURCE

STATIC

DYNAMIC

URL

RESOURCE LOCATOR

RESOUCRE IDENTIFER

VERBS

GET

POST

PUT

DELETE

CONTENT TYPE MESSAGE

HTTP REQUEST

HTTP RESPONSE

STATUS CODE

1xx - INFORMATIONAL

2xx - SUCCESSFUL

3xx - REDIRECTION

4xx – CLIENT ERROR

5xx – SERVER ERROR

WWW

HTML

WHAT IS THE WEB?

An information system of interlinked hypertext documents and resources

accessed via the Internet

HYPERTEXT DOCUMENTS

HYPERTEXT MARKUP LANGUAGE

AGENDA - HTTP

HTTP

RESOURCE

STATIC

DYNAMIC

URL

RESOURCE LOCATOR

RESOUCRE IDENTIFER

VERBS

GET

POST

PUT

DELETE

CONTENT TYPE MESSAGE

HTTP REQUEST

HTTP RESPONSE

STATUS CODE

1xx - INFORMATIONAL

2xx - SUCCESSFUL

3xx - REDIRECTION

4xx – CLIENT ERROR

5xx – SERVER ERROR

WWW

HTML

RESOURCES

Anything that can be identified, named, addressed or

handled on the Web

RESOURCE

▫ Can be concrete things :• Web Pages• Video fi les• Artic les• Blogs• Image fi le

RESOURCE

▫ Can be static and dynamic

RESOURCE

▫ Can a lso represent abstract concepts• Employee or Product or Order• Time• Money Transfer• Calendar• User Accounts

AGENDA HTTP

HTTP

RESOURCE

STATIC

DYNAMIC

URL

RESOURCE LOCATOR

RESOUCRE IDENTIFER

VERBS

GET

POST

PUT

DELETE

CONTENT TYPE MESSAGE

HTTP REQUEST

HTTP RESPONSE

STATUS CODE

1xx - INFORMATIONAL

2xx - SUCCESSFUL

3xx - REDIRECTION

4xx – CLIENT ERROR

5xx – SERVER ERROR

WWW

HTML

URL

Uniform Resource Locator

A URL is a specialization of URI that defines the network location of resource

URL defines how the resource can be obtained

eg.http://some.domain.com/orderinfo?id=123

URL ANOTOMY

U R I - Un ifor m Res ou rc e I d e n ti fi e r

U R L - Un ifo r m Res ou rc e L o c a t o r

RESOURCE IDENTFIERS

A resource only exists on the Web if it has an identifier (URI)

RESOURCE NAMES

▫ URN - Uniform Resource Nam e• products/54321 • about-us• artic les/web.html• posts/2015-01-12• podcasts/rest .mp3• products/9595

AGENDA

HTTP

RESOURCE

STATIC

DYNAMIC

URL

RESOURCE LOCATOR

RESOUCRE IDENTIFER

CONTENT TYPE VERBS

GET

POST

PUT

DELETE

MESSAGE

HTTP REQUEST

HTTP RESPONSE

STATUS CODE

1xx - INFORMATIONAL

2xx - SUCCESSFUL

3xx - REDIRECTION

4xx – CLIENT ERROR

5xx – SERVER ERROR

WWW

HTML

HTTP can transfer any kind of information between clients and servers

E.g. Text files, PDF, e-documents, images, videos, etc.

In any case, the data is streamed over TCP/IP and browser knows how to interpret the binary streams because of the HTTP protocol response header Content-Type

CONTENT-TYPES

AGENDA

HTTP

RESOURCE

STATIC

DYNAMIC

URL

RESOURCE LOCATOR

RESOUCRE IDENTIFER

CONTENT TYPE VERBS

GET

POST

PUT

DELETE

MESSAGE

HTTP REQUEST

HTTP RESPONSE

STATUS CODE

1xx - INFORMATIONAL

2xx - SUCCESSFUL

3xx - REDIRECTION

4xx – CLIENT ERROR

5xx – SERVER ERROR

WWW

HTML

HTTP VERBS

AGENDA

HTTP

RESOURCE

STATIC

DYNAMIC

URL

RESOURCE LOCATOR

RESOUCRE IDENTIFER

CONTENT TYPE VERBS

GET

POST

PUT

DELETE

MESSAGE

HTTP REQUEST

HTTP RESPONSE

STATUS CODE

1xx - INFORMATION

2xx - SUCCESSFUL

3xx - REDIRECTION

4xx – CLIENT ERROR

5xx – SERVER ERROR

WWW

HTML

HTTP STATUS CODE

S e r v e r ’s p r o c e s s e d s t a t u s c o r r e s p o n d i n g t o a r e q u e s t C o m b i n a ti o n o f n u m e r i c a l c o d e & s h o r t d e s c r i p ti o n

AGENDA

HTTP

RESOURCE

STATIC

DYNAMIC

URL

RESOURCE LOCATOR

RESOUCRE IDENTIFER

CONTENT TYPE VERBS

GET

POST

PUT

DELETE

MESSAGE

HTTP REQUEST

HTTP RESPONSE

STATUS CODE

1xx - INFORMATIONAL

2xx - SUCCESSFUL

3xx - REDIRECTION

4xx – CLIENT ERROR

5xx – SERVER ERROR

WWW

HTML

HYPERTEXT TRANSFER PROTOCOL

ServerClient

Yahoo.comMozilla Firefox

HTTP COMMUNICATION

HTTP MESSAGE - REQUEST

ServerClient

Yahoo.comMozilla Firefox HTTP Request

GET /HTTP/1.1User-Agent: Mozilla Firefox Host: example.comAccept: */*

HYPERTEXT TRANSFER PROTOCOL

ServerClient

Yahoo.comMozilla Firefox

HTTP Response

HTTP/1.1 200 OKContent-Type: text/html Content-Length: 1270

<!doctype html><html><head>

<title>Example Domain</title>

</head><body> … </body></html>

HTTP request message is sent from the client (Brower) to HTTP Web-Server.

Request message contain:

location of a resource or resource URIHTTP method to use when accessing the resource.Optional request headers (name-value pairs) providing additional informationRequest body that identifies additional data to be uploaded to the server (e.g. form parameters, attachments, etc.)

HTTP REQUEST MESSAGE

HTTP response message is sent from HTTP Web-Server back to the client (Web-Browser).

Response message contain:

Carry status of processed request.Provide response headers (name-value pairs) providing additional information about the responseSupplies optional response body that identifies additional data to be downloaded to the server (e.g. html, images, attachments etc.

HTTP RESPONSE MESSAGE

HTTP MESSAGE FORMAT

Request Line

Response

BOTH

HTTP MESSAGE FORMAT

/fruits/list?category=fruits&limits=20

Path to resource

Query string

HTTP /1.1

HTTP HEADER – REQUEST LINE

Request/ Response General Header

Carry information about the HTTP transaction

Can be a part of request, as well as response

General Headers

HTTP HEADER – GENERAL

Request Header

Specific to an HTTP Request Carry information about the client, and the type of request Facilitates better understanding between client and server

Request Headers

HTTP HEADER – REQUEST

Request/ Response Entity Header

Carry information about the content Mainly part of HTTP Response

Entity Headers

HTTP HEADER – ENTITY

HTTP REQUEST RESPONSE MESSAGE EXCHANGE

REST

Representational State Transfer

REST

HTTP + Resource-Oriented Architecture

REST

HTTP + Resource-Oriented ArchitectureRESTful

What is REST?

REST is not a technology, nor a framework

REST is an architectural style - Set of principles & constraints

Why constraints?

Constraints help us in developing applications that are “easy” to maintain and extend.

REST

MAJOR PLAYERS

REST ACTORS

REST

RESOURCES REPRESENTATION ACTIONS

REST ACTORS

REST

RESOURCES REPRESENTATION ACTIONS

In general, a RESTful resource is anything that is addressable over Web

Addressable = anything that can be accessed and transferred between clients and servers

Resource must have a unique address over the Web

Under HTTP these are URIs

RESOURCES

In a RESTful web service, Resources are categorized as:

Singleton resource is a single chunk of information, similar to a row in a database table.

Collection resource is a set of resources with the same structure, similar to a selection of rows in a database table. 

RESOURCES MODEL

Uniform Resource Identifier

In a RESTful web service, It is a hyperlink to a resource Means for clients and servers to exchange

representations of resourcesex.

.../orderinfo?id=123 Only means to locate a specific resource Used to negotiate representations of a given resource

In the url you give certain parameters that define which information you want the server to return to you (just like giving GET variables to a page). Server will respond you with a resource representation containing the information you’ve asked

URIs

URIs are also used to link resources together. ex.

URIs

REST ACTORS

REST

RESOURCES REPRESENTATION ACTIONS

Representation of resources is what is sent back and forth between clients & servers

So, we never send or receive resources, only their representations

REPRESENTATION

Format of the representation is determined by the content-type

Interaction of the representation on the resource is determined by the action (GET, POST etc.)

REPRESENTATION

Different clients are able to consume different representations of the same resource

A representation can take various forms, such as:

• image• a text file• an XML stream• a JSON stream

Note: But its resource has to be available through the same URI

REPRESENTATION FORMATS

REPRESENTATION FORMATS

For human-generated requests through a web browser, a representation is typically in the form of an HTML page

For automated requests from other web services, readability is not as important and a more efficient representation can be used such as XML or JSON

REST ACTORS

REST

RESOURCES REPRESENTATION ACTIONS

ACTIONS

Actions are used to operate on resources

For example, they can be used for– getting info about a movie– adding a photo to Flickr– deleting a file from a folder

Note: Data transmitted to and from the resource is a representation of it.

HTTP-BASED ACTIONS

Note: RESTful web services can also execute logic at the server level, but remembering that every result must be a resource representation

HTTP as Uninform Interface

Note: RESTful web services can also execute logic at the server level, but remembering that every result must be a resource representation

HTTP as Uninform Interface

Restful Approach Traditional ApproachFocus on resource names Focused on the actions to be

performed on resourcesFour specific actions that we can take upon resources — Create, Retrieve, Update, and Delete (CRUD)

Countless actions with no naming or implementation standards

HTTP as Uninform Interface

Artificial example of a web service handling students in some classroom

Location of the service = http://restfuljava.com/ Resources

are represented as XML streams

CLASSROOM EXAMPLE

Student (identified by name):http://restfuljava.com/students/{name}

List of students:http://restfuljava.com/students

CLASSROOM EXAMPLE - URIs

Student Schema

<student><name>Jane</name><age>10</age><link>/students/Jane</link>

</student>

CLASSROOM EXAMPLE - REPRESENTATIONS

Students List:

<students><student>

<name>Jane</name><age>10</age><link>/students/Jane</link>

</student><student>

<name>John</name><age>11</age><link>/students/John</link>

</student></students>

CLASSROOM EXAMPLE - REPRESENTATIONS

CLASSROOM EXAMPLE - REPRESENTATIONS

GET POST PUT DELETEGET is used to RETRIEVE resources

POST is used to CREATE resources

PUT is used to UPDATE resources

DELETE is used to DELETE resources

No side effects Has side effects Has side effects Has side effects

Can also return only parts of the resource

The resource identity/URL is not known at creation time

Return updated resource URL

Used for Read operation and query

GET EXAMPLE

POST EXAMPLE

The initial GET is

omitted here

PUT EXAMPLE

DELETE EXAMPLE

REST Constraints

1. Uniform Interfaces – Resource Model• Every resource has a unique id which uniquely identify.• Every resource has URI [Uniform Resource Identifier].

URI Syntax URI

Resource URL Mapping with HTTP Method

HTTP Methods

Resource CRUD OperationsResource URI

REST Constraints

REST Constraints

Uniform Interface

REST Constraints

1. Uniform Interfaces

REST Constraints

1. Uniform Interfaces - Resources

REST Constraints

1. Uniform Interfaces - Resource• Resource is a chunk of related information of an entity.• Can be static and dynamic.• Resources words are ‘NOUNS’ such as Movies, Employees, Products, Photos

REST Constraints

1. Uniform Interfaces – Resource Model• Singleton resource is a single chunk of information, similar to a row in a database table. • Collection resource is a set of resources with the same structure, similar to a selection of rows in a

database table.

REST Constraints

1. Uniform Interfaces – Resource Model• Every resource has a unique id which uniquely identify.• Every resource has URI [Uniform Resource Identifier].

URI Syntax URI

REST Constraints

1. Uniform Interfaces – Resource Model

Yahoo Social REST APIs

Singleton resource : Following URI defines the profile resource for the user whose ID is 12345.https://social.yahooapis.com/v1/user/12345/profile

The next URI specifies the connections (friends) for the user whose ID is 6677.https://social.yahooapis.com/v1/user/6677/connections

Collection resource : Following URI accesses the collection of schools contained in the profile of the user of ID 98765.https://social.yahooapis.com/v1/user/98765/profile/schools

REST Constraints

1. Uniform Interfaces - Methods

Resource URL Mapping with HTTP Method

HTTP Methods

Resource CRUD OperationsResource URI

REST Constraints

HTTP Methods

REST Constraints

1. Uniform Interfaces - Representations

REST Constraints

Stateless

2. Stateless ServerTwo types of State

Application State Resource State

REST Constraints

2. Stateless Server No client context is stored on the server between requests. Each request from any client contains all of the information

necessary to service the request, and any state is held in the client.

The server can be stateful, this constraint merely requires that server-side state be addressable by URL as a resource.

REST Constraints

REST Constraints

Application StateExchange of Request Identify between Server and Client

REST Constraints

Resource StateWhat is stored on the server (Beyond Session)

REST Constraints

2. Stateless Server Each request contains ALL the information

necessary to understand it

Application (session) state is kept on the client

REST Constraints

2. Stateless Server

Visibility - Performance

Reliability - Consistency

Scalability

REST Constraints

Client Server

1. Client - Server

Separation of Concerns: Client responsible for UI Server responsible for data

storage

REST Constraints

1. Client - Server

REST Constraints

+ Scalability + Simplicity

REST Constraints

Cache

REST Constraints

3. Cache Clients are able to cache responses. Responses must, implicitly or explicitly, define themselves as

cacheable or not.

REST Constraints

3. Cache

Efficiency Scalability UP

Performance

REST Constraints

Layered System

AN EXMAPLE

HTTP server:

example.com

READING A TEXT RESOURCE

http://example.com/hello-world.txt

GET /hello-world.txt HTTP/1.1 Host: example.com

HTTP Request

READING A TEXT RESOURCE

http://example.com/hello-world.txt

HTTP Response

HTTP/1.1 200 OKContent-Type: text/plain Content-Length: 13

Hello, World!

CREATING A TEXT RESOURCE

POST / HTTP/1.1 Host: example.comContent-type: text/plan

Hello Mars

HTTP Request

CREATING A TEXT RESOURCE

HTTP/1.1 201 Created Location: /hello-mars.txt

HTTP Response

RESOURCE DOES NOT EXIST

http://example.com/hello-world.txt

GET /hello-world.txt HTTP/1.1 Host: example.com

HTTP Request

RESOURCE DOES NOT EXIST

HTTP/1.1 404 Not Found

HTTP Response

EMPLOYEE RESOURCE

N a m e G e n d e r R o l e

XML REPRESENTATION

<employee>

<name>Alice</name>

<role>Developer</role>

<gender>female</gender>

</employee>

JSON REPRESENTATION

{

"name": "Alice","role": "Developer", "gender": "female"

}

HTML REPRESENTATION

<h1>Alice</h1>

<dl>

<dt>Role:</dt>

<dd>Developer</dd>

<dt>Gender:</dt>

<dd>Female</dd>

</dl>

EMPLOYEE RESOURCE

/employees/alice

/employees/bob

/employees/eve

RESOURCE OPERATIONS

LIST EMPLOYEE RESOURCES

GET /employees HTTP/1.1 Host: example.com Accept: application/xml

HTTP Request

LIST EMPLOYEE RESOURCES

HTTP Response

HTTP/1.1 200 OKContent-Type: application/xml

<employees><employee href="/employees/alice"/><employee href="/employees/bob"/><employee href="/employees/eve"/>

</employee>

LIST EMPLOYEE RESOURCES

HTTP Response

HTTP/1.1 200 OKContent-Type: application/xml

<employees><employee href="/employees/alice"/><employee href="/employees/bob"/><employee href="/employees/eve"/>

</employee>

READ EMPLOYEE RESOURCE

GET /employees/alice HTTP/1.1 Host: example.com Accept: application/xml

HTTP Request

READ EMPLOYEE RESOURCE

HTTP Response

HTTP/1.1 200 OKContent-Type: application/xml

<employees><name>Alice</name><role>Developer</role><gender>Female</gender>

</employee>

CREATE EMPLOYEE RESOURCE

HTTP Request

POST /employees HTTP/1.1 Host: example.comContent-Type: application/xml

<employee><name>John</name><role>QA</role><gender>male</gender>

</employee>

CREATE EMPLOYEE RESOURCE

HTTP Response

HTTP/1.1 200 OK

UPDATE EMPLOYEE RESOURCE

HTTP Request

PUT /employees/alice HTTP/1.1 Host: example.comContent-Type: application/xml

<employee><name>Alice</name><role>Manager</role><gender>female</gender>

</employee>

UPDATE EMPLOYEE RESOURCE

HTTP Response

HTTP/1.1 201 Created Location: /employees/john

DELETE EMPLOYEE RESOURCE

HTTP Request

DELETE /employees/alice HTTP/1.1 Host: example.comContent-Type: application/xml

DELETE EMPLOYEE RESOURCE

HTTP Response

HTTP/1.1 204 NO Content

RESOURCE ORIENTED ARCHITECTURE

Addressability

Statelessness

C on ne cted n ess

Uniform Interface

ADDRESSSABILITY

Every interesting piece of information the server can provide

should be exposed as a resource, and given its own URI

http://example.com/employees/alice

STATELESSNESS

Every HTTP request should happen in complete isolation

http://google.com/search?q=jellyfish

STATELESSNESS

STATELESSNESS

Application State vs. Resource State

CONNECTEDNESS

Documents should contain not just data, but

links to other resources

CONNECTEDNESS

CONNECTEDNESS

CONNECTEDNESS

CONNECTEDNESS

{"employees": [ "/employees/alice",

"/employees/bob", "/employees/eve",

...]

"next_page": "/employees?start=10",

"create_employee": "/employees"

}

HATEOS

Hypermedia As The Engine of Application State

REST Constraints