Post on 15-Feb-2017
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
http://google.com/search?q=jellyfish&start=10
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