SlideShare a Scribd company logo
Designing REST services with
Spring MVC
Serhii Kartashov
December 2015
Softjourn
Internship
Agenda
What is REST?
CRUD operations
Status codes
Media types
SpringMVC instruments
Agenda
What is REST?
CRUD operations
Status codes
Media types
SpringMVC instruments
What is REST?
• REpresentational State Transfer
• Client/Server, Stateless, Uniform Interface
• Hightly-Cohesive, loosely coupled services
Uniform Interface
• Identification of resources
• Manipulation of resources
• Self-describing of resources
Representations of the resource over a
network
• URI - Uniform Resource Identifier
• URL - Uniform Resource Locator
• URN - Uniform Resource Name
HTTP's uniform interface
• URI's identify resources
/accounts/0
• HTTP verbs descried a limited set of
operations that can be used to manipulate a
resource
POST, GET, PUT, DELETE, ...
• Headers describes the messages
Content-Type: application/json
GET
• Retrieve Information
• Must be save and idempotent
• Get can be conditional or partial
If-Modified-Since
Range
DELETE
• Requests that a resource be removed
• The resource doesn't have to be removed
immediately
• Removal may be a long running task
DELETE /accounts/0
PUT
• Requests that the entity passed, be stored at
the URI
• Can be used to modify an existing one
PUT /accounts/0/creditcards/1
POST
• Requests that the resource at the URI do
something with the enclosed entity
Create, Modify
POST /accounts
Agenda
What is REST?
CRUD operations
Status codes
Media types
SpringMVC instruments
Interaction Model
• List the current accounts in bank
• Create new account
• Create new credit card
• List the current credit cards of account
• Make transaction between two credit cards
• Lock credit card
• Delete account
List the current accounts in bank
• Need to return to us a collection that
represents
• Design doesn't have Account1, Account2,
Account..., just accounts
GET: /accounts
Response: [{"id":0,"name":"Mike"}, {...}, {...}]
Create new account
• Need to create new account in bank with
providing name of person
• Good practice is returning already created
account
POST: /accounts
json: {"name":"Matt"}
Response: {"id":2,"name":"Matt"}
Create new credit card
• That just a request for creation credit card
automatically
POST: /accounts/2/creditcards
json: {"pin":1111, "cardNumber":2,
"cardStatus":"ACTIVE", "remnant":0.0}
List the current credit cards of account
• Need to return to us a collection of all
available credit cards
GET: /accounts/2/creditcards
Response: [ {"pin":1111, "cardNumber":2,
"cardStatus":"ACTIVE", "remnant":0.0} ]
Make transaction between two credit
cards
• Transaction be running during some time
• Possible situation when you created just a
request for transaction and receive just info
when this will be precessed
POST: /accounts/2/creditcards
json: {"fromCreditCard": "1", "toCreditCard": "2",
"amount": "20"}
Transaction successfully processed
Lock Credit Card
• Changed status of credit card
PUT: /accounts/2/creditcards/2
{"pin":1111, "cardNumber":2,
"cardStatus":"LOCKED", "remnant":20.0}
Delete account
• No input required
• No output required
DELETE /accounts/2
Agenda
What is REST?
CRUD operations
Status codes
Media types
SpringMVC instruments
Status codes
• Status codes indicates the results of the
server's attempt to satisfy the request
• Broadly divided into categories
– 1XX: Informational
– 2XX: Success
– 3XX: Redirection
– 4XX: Client Error
– 5XX: Server Error
Success Status Codes
• 200 OK
Everything worked
• 201 Created
The server has successfully created a new resource
Newly created resource’s location returned in the
Location header
• 202 Accepted
The server has accepted the request, but it is not yet
complete
A location to determine the request’s current status can
be returned in the Location header
Client Error Status Codes
• 400 Bad Request
Malformed syntax
Should not be repeated without modification
• 401 Unauthorized
Authentication is required
Includes a WWW-‐Authenticate header
• 403 Forbidden
Server has understood but refuses to honor the
request
Should not be repeated without modification
Client Error Status Codes
• 404 Not Found
The server cannot find a resource matching a URI
• 406 Not Acceptable
The server can only return response entities that do
not match the client’s Accept header
• 409 Conflict
The resource is in a state that is in conflict with the
request
Client should attempt to rectify the conflict and
then resubmit the request
Agenda
What is REST?
CRUD operations
Status codes
Media types
SpringMVC instruments
Communication between client and
server
Content types are negotiated using headers:
• Client describes what it wants with the Accept
header
• Server (and client during POST and PUT)
describes what it is sending with Content-
Type header
Common Media Types
• Application
– JSON: application/json
– XML: application/xml
– PDF: application/pdf
• Text
– HTML: text/html
– PLAIN: text/plain
Addition Media Types
• Image
– JPEG: image/jpeg
• Audio
– MP4: audio/mp4
– WEBM: audio/webm
• Video
– MP4: video/mp4
– WEBM: video/webm
• Prefix vnd (vendor specific files)
– application/vnd.android.package-archive - for apk files
– application/vnd.ms-excel
Agenda
What is REST?
CRUD operations
Status codes
Media types
SpringMVC instruments
What other instruments Spring MVC
can provide?
• @RestController
Union of @Controller and @RequestBody
annotations
• @RequestBody
• @RequestMapping
value; method; consumes; produces
• @PathVariable
• @RequestParam
What other instruments Spring MVC
can provide?
• @RequestHeader
• @MatrixVariable
/owners/{ownerId}/pets/{petId}
GET /owners/42;q=11;r=12/pets/21;q=22;s=23
@MatrixVariable(pathVar="petId") Map<String, String>
petMatrixVars
<mvc:annotation-driven enable-matrix-
variables="true"/>
• @SessionAttributes
• @ModelAttribute
• @CookieValue
What more?
• Testing REST with MockMvc
• REST Client
• Caching
• Version handling
• Scaling: CDN (Content Delivery Network)
Useful links
• Tutorials
– http://www.restapitutorial.com/
• Video & Articles
– https://www.youtube.com/watch?v=5WXYw4J4QOU
– ETags: http://www.infoq.com/articles/etags
– Manage REST API versions:
http://stackoverflow.com/questions/20198275/how-to-manage-rest-api-
versioning-with-spring?answertab=votes#tab-
tophttp://stackoverflow.com/questions/20198275/how-to-manage-rest-api-
versioning-with-spring?answertab=votes#tab-top
– Steps towards the glory of REST:
http://martinfowler.com/articles/richardsonMaturityModel.html
• Examples from presentation: https://github.com/searhiy/REST-examples
• Instruments & Tools
– https://github.com/spring-projects/spring-data-rest
– http://spring.io/blog/2009/03/27/rest-in-spring-3-resttemplate
Designing REST services with Spring MVC

More Related Content

What's hot

Best Practices in Web Service Design
Best Practices in Web Service DesignBest Practices in Web Service Design
Best Practices in Web Service Design
Lorna Mitchell
 
HATEOAS: The Confusing Bit from REST
HATEOAS: The Confusing Bit from RESTHATEOAS: The Confusing Bit from REST
HATEOAS: The Confusing Bit from REST
elliando dias
 
Dynamic content generation
Dynamic content generationDynamic content generation
Dynamic content generation
Eleonora Ciceri
 

What's hot (20)

Rest web services
Rest web servicesRest web services
Rest web services
 
ASP.NET Mvc 4 web api
ASP.NET Mvc 4 web apiASP.NET Mvc 4 web api
ASP.NET Mvc 4 web api
 
Session 25 - Introduction to JEE, Servlets
Session 25 - Introduction to JEE, ServletsSession 25 - Introduction to JEE, Servlets
Session 25 - Introduction to JEE, Servlets
 
Best Practices in Web Service Design
Best Practices in Web Service DesignBest Practices in Web Service Design
Best Practices in Web Service Design
 
Excellent rest using asp.net web api
Excellent rest using asp.net web apiExcellent rest using asp.net web api
Excellent rest using asp.net web api
 
HATEOAS: The Confusing Bit from REST
HATEOAS: The Confusing Bit from RESTHATEOAS: The Confusing Bit from REST
HATEOAS: The Confusing Bit from REST
 
Web service testing_final.pptx
Web service testing_final.pptxWeb service testing_final.pptx
Web service testing_final.pptx
 
Session 29 - Servlets - Part 5
Session 29 - Servlets - Part 5Session 29 - Servlets - Part 5
Session 29 - Servlets - Part 5
 
SOAP-based Web Services
SOAP-based Web ServicesSOAP-based Web Services
SOAP-based Web Services
 
Session 30 - Servlets - Part 6
Session 30 - Servlets - Part 6Session 30 - Servlets - Part 6
Session 30 - Servlets - Part 6
 
Dynamic content generation
Dynamic content generationDynamic content generation
Dynamic content generation
 
REST Easy with AngularJS - ng-grid CRUD EXAMPLE
REST Easy with AngularJS - ng-grid CRUD EXAMPLEREST Easy with AngularJS - ng-grid CRUD EXAMPLE
REST Easy with AngularJS - ng-grid CRUD EXAMPLE
 
Session 31 - Session Management, Best Practices, Design Patterns in Web Apps
Session 31 - Session Management, Best Practices, Design Patterns in Web AppsSession 31 - Session Management, Best Practices, Design Patterns in Web Apps
Session 31 - Session Management, Best Practices, Design Patterns in Web Apps
 
AJAX - An introduction
AJAX - An introductionAJAX - An introduction
AJAX - An introduction
 
Web services - A Practical Approach
Web services - A Practical ApproachWeb services - A Practical Approach
Web services - A Practical Approach
 
ASP.NET WEB API Training
ASP.NET WEB API TrainingASP.NET WEB API Training
ASP.NET WEB API Training
 
Rest and Rails
Rest and RailsRest and Rails
Rest and Rails
 
REST Easy - Building RESTful Services in Zend Framework
REST Easy - Building RESTful Services in Zend FrameworkREST Easy - Building RESTful Services in Zend Framework
REST Easy - Building RESTful Services in Zend Framework
 
HTML5 - An introduction
HTML5 - An introductionHTML5 - An introduction
HTML5 - An introduction
 
Hadoop introduction
Hadoop introductionHadoop introduction
Hadoop introduction
 

Viewers also liked (6)

Introduction into Git
Introduction into GitIntroduction into Git
Introduction into Git
 
SpringMVC
SpringMVCSpringMVC
SpringMVC
 
Design REST-ful Web Service
Design REST-ful Web ServiceDesign REST-ful Web Service
Design REST-ful Web Service
 
Testing database content with DBUnit. My experience.
Testing database content with DBUnit. My experience.Testing database content with DBUnit. My experience.
Testing database content with DBUnit. My experience.
 
Spring Mvc Rest
Spring Mvc RestSpring Mvc Rest
Spring Mvc Rest
 
RESTful SOA and the Spring Framework (EMCWorld 2011)
RESTful SOA and the Spring Framework (EMCWorld 2011)RESTful SOA and the Spring Framework (EMCWorld 2011)
RESTful SOA and the Spring Framework (EMCWorld 2011)
 

Similar to Designing REST services with Spring MVC

GSoC Mideterm-OAuth2 Module
GSoC Mideterm-OAuth2 ModuleGSoC Mideterm-OAuth2 Module
GSoC Mideterm-OAuth2 Module
Mayank Sharma
 
REST APIs for the Internet of Things
REST APIs for the Internet of ThingsREST APIs for the Internet of Things
REST APIs for the Internet of Things
Michael Koster
 
REST APIs for an Internet of Things
REST APIs for an Internet of ThingsREST APIs for an Internet of Things
REST APIs for an Internet of Things
Michael Koster
 
REST API Recommendations
REST API RecommendationsREST API Recommendations
REST API Recommendations
Jeelani Shaik
 

Similar to Designing REST services with Spring MVC (20)

Rest & RESTful WebServices
Rest & RESTful WebServicesRest & RESTful WebServices
Rest & RESTful WebServices
 
REST API Design
REST API DesignREST API Design
REST API Design
 
Rest APIs Training
Rest APIs TrainingRest APIs Training
Rest APIs Training
 
.NET Core, ASP.NET Core Course, Session 19
 .NET Core, ASP.NET Core Course, Session 19 .NET Core, ASP.NET Core Course, Session 19
.NET Core, ASP.NET Core Course, Session 19
 
RESTful Web Services
RESTful Web ServicesRESTful Web Services
RESTful Web Services
 
Rest WebAPI with OData
Rest WebAPI with ODataRest WebAPI with OData
Rest WebAPI with OData
 
Building Your First App with MongoDB
Building Your First App with MongoDBBuilding Your First App with MongoDB
Building Your First App with MongoDB
 
Protecting your APIs with Doorkeeper and OAuth 2.0
Protecting your APIs with Doorkeeper and OAuth 2.0Protecting your APIs with Doorkeeper and OAuth 2.0
Protecting your APIs with Doorkeeper and OAuth 2.0
 
Moulding your enterprise with ROA
Moulding your enterprise with ROAMoulding your enterprise with ROA
Moulding your enterprise with ROA
 
SCWCD : Session management : CHAP : 6
SCWCD : Session management : CHAP : 6SCWCD : Session management : CHAP : 6
SCWCD : Session management : CHAP : 6
 
Research Topics in Machine Hypermedia
Research Topics in Machine HypermediaResearch Topics in Machine Hypermedia
Research Topics in Machine Hypermedia
 
Together Cheerfully to Walk with Hypermedia
Together Cheerfully to Walk with HypermediaTogether Cheerfully to Walk with Hypermedia
Together Cheerfully to Walk with Hypermedia
 
RefCard RESTful API Design
RefCard RESTful API DesignRefCard RESTful API Design
RefCard RESTful API Design
 
GSoC Mideterm-OAuth2 Module
GSoC Mideterm-OAuth2 ModuleGSoC Mideterm-OAuth2 Module
GSoC Mideterm-OAuth2 Module
 
REST APIs for the Internet of Things
REST APIs for the Internet of ThingsREST APIs for the Internet of Things
REST APIs for the Internet of Things
 
REST APIs for an Internet of Things
REST APIs for an Internet of ThingsREST APIs for an Internet of Things
REST APIs for an Internet of Things
 
APITalkMeetupSharable
APITalkMeetupSharableAPITalkMeetupSharable
APITalkMeetupSharable
 
REST API Recommendations
REST API RecommendationsREST API Recommendations
REST API Recommendations
 
Windows 8 Metro apps and the outside world
Windows 8 Metro apps and the outside worldWindows 8 Metro apps and the outside world
Windows 8 Metro apps and the outside world
 
Rest webservice ppt
Rest webservice pptRest webservice ppt
Rest webservice ppt
 

Recently uploaded

How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
Globus
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns
 

Recently uploaded (20)

Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
 
Agnieszka Andrzejewska - BIM School Course in Kraków
Agnieszka Andrzejewska - BIM School Course in KrakówAgnieszka Andrzejewska - BIM School Course in Kraków
Agnieszka Andrzejewska - BIM School Course in Kraków
 
De mooiste recreatieve routes ontdekken met RouteYou en FME
De mooiste recreatieve routes ontdekken met RouteYou en FMEDe mooiste recreatieve routes ontdekken met RouteYou en FME
De mooiste recreatieve routes ontdekken met RouteYou en FME
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
 
Facemoji Keyboard released its 2023 State of Emoji report, outlining the most...
Facemoji Keyboard released its 2023 State of Emoji report, outlining the most...Facemoji Keyboard released its 2023 State of Emoji report, outlining the most...
Facemoji Keyboard released its 2023 State of Emoji report, outlining the most...
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
 
GraphAware - Transforming policing with graph-based intelligence analysis
GraphAware - Transforming policing with graph-based intelligence analysisGraphAware - Transforming policing with graph-based intelligence analysis
GraphAware - Transforming policing with graph-based intelligence analysis
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
 
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdfA Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
 
Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...
Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...
Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...
 

Designing REST services with Spring MVC

  • 1. Designing REST services with Spring MVC Serhii Kartashov December 2015 Softjourn Internship
  • 2. Agenda What is REST? CRUD operations Status codes Media types SpringMVC instruments
  • 3. Agenda What is REST? CRUD operations Status codes Media types SpringMVC instruments
  • 4. What is REST? • REpresentational State Transfer • Client/Server, Stateless, Uniform Interface • Hightly-Cohesive, loosely coupled services
  • 5. Uniform Interface • Identification of resources • Manipulation of resources • Self-describing of resources
  • 6. Representations of the resource over a network • URI - Uniform Resource Identifier • URL - Uniform Resource Locator • URN - Uniform Resource Name
  • 7. HTTP's uniform interface • URI's identify resources /accounts/0 • HTTP verbs descried a limited set of operations that can be used to manipulate a resource POST, GET, PUT, DELETE, ... • Headers describes the messages Content-Type: application/json
  • 8. GET • Retrieve Information • Must be save and idempotent • Get can be conditional or partial If-Modified-Since Range
  • 9. DELETE • Requests that a resource be removed • The resource doesn't have to be removed immediately • Removal may be a long running task DELETE /accounts/0
  • 10. PUT • Requests that the entity passed, be stored at the URI • Can be used to modify an existing one PUT /accounts/0/creditcards/1
  • 11. POST • Requests that the resource at the URI do something with the enclosed entity Create, Modify POST /accounts
  • 12. Agenda What is REST? CRUD operations Status codes Media types SpringMVC instruments
  • 13. Interaction Model • List the current accounts in bank • Create new account • Create new credit card • List the current credit cards of account • Make transaction between two credit cards • Lock credit card • Delete account
  • 14. List the current accounts in bank • Need to return to us a collection that represents • Design doesn't have Account1, Account2, Account..., just accounts GET: /accounts Response: [{"id":0,"name":"Mike"}, {...}, {...}]
  • 15. Create new account • Need to create new account in bank with providing name of person • Good practice is returning already created account POST: /accounts json: {"name":"Matt"} Response: {"id":2,"name":"Matt"}
  • 16. Create new credit card • That just a request for creation credit card automatically POST: /accounts/2/creditcards json: {"pin":1111, "cardNumber":2, "cardStatus":"ACTIVE", "remnant":0.0}
  • 17. List the current credit cards of account • Need to return to us a collection of all available credit cards GET: /accounts/2/creditcards Response: [ {"pin":1111, "cardNumber":2, "cardStatus":"ACTIVE", "remnant":0.0} ]
  • 18. Make transaction between two credit cards • Transaction be running during some time • Possible situation when you created just a request for transaction and receive just info when this will be precessed POST: /accounts/2/creditcards json: {"fromCreditCard": "1", "toCreditCard": "2", "amount": "20"} Transaction successfully processed
  • 19. Lock Credit Card • Changed status of credit card PUT: /accounts/2/creditcards/2 {"pin":1111, "cardNumber":2, "cardStatus":"LOCKED", "remnant":20.0}
  • 20. Delete account • No input required • No output required DELETE /accounts/2
  • 21.
  • 22. Agenda What is REST? CRUD operations Status codes Media types SpringMVC instruments
  • 23. Status codes • Status codes indicates the results of the server's attempt to satisfy the request • Broadly divided into categories – 1XX: Informational – 2XX: Success – 3XX: Redirection – 4XX: Client Error – 5XX: Server Error
  • 24. Success Status Codes • 200 OK Everything worked • 201 Created The server has successfully created a new resource Newly created resource’s location returned in the Location header • 202 Accepted The server has accepted the request, but it is not yet complete A location to determine the request’s current status can be returned in the Location header
  • 25. Client Error Status Codes • 400 Bad Request Malformed syntax Should not be repeated without modification • 401 Unauthorized Authentication is required Includes a WWW-‐Authenticate header • 403 Forbidden Server has understood but refuses to honor the request Should not be repeated without modification
  • 26. Client Error Status Codes • 404 Not Found The server cannot find a resource matching a URI • 406 Not Acceptable The server can only return response entities that do not match the client’s Accept header • 409 Conflict The resource is in a state that is in conflict with the request Client should attempt to rectify the conflict and then resubmit the request
  • 27.
  • 28. Agenda What is REST? CRUD operations Status codes Media types SpringMVC instruments
  • 29. Communication between client and server Content types are negotiated using headers: • Client describes what it wants with the Accept header • Server (and client during POST and PUT) describes what it is sending with Content- Type header
  • 30. Common Media Types • Application – JSON: application/json – XML: application/xml – PDF: application/pdf • Text – HTML: text/html – PLAIN: text/plain
  • 31. Addition Media Types • Image – JPEG: image/jpeg • Audio – MP4: audio/mp4 – WEBM: audio/webm • Video – MP4: video/mp4 – WEBM: video/webm • Prefix vnd (vendor specific files) – application/vnd.android.package-archive - for apk files – application/vnd.ms-excel
  • 32. Agenda What is REST? CRUD operations Status codes Media types SpringMVC instruments
  • 33. What other instruments Spring MVC can provide? • @RestController Union of @Controller and @RequestBody annotations • @RequestBody • @RequestMapping value; method; consumes; produces • @PathVariable • @RequestParam
  • 34. What other instruments Spring MVC can provide? • @RequestHeader • @MatrixVariable /owners/{ownerId}/pets/{petId} GET /owners/42;q=11;r=12/pets/21;q=22;s=23 @MatrixVariable(pathVar="petId") Map<String, String> petMatrixVars <mvc:annotation-driven enable-matrix- variables="true"/> • @SessionAttributes • @ModelAttribute • @CookieValue
  • 35. What more? • Testing REST with MockMvc • REST Client • Caching • Version handling • Scaling: CDN (Content Delivery Network)
  • 36. Useful links • Tutorials – http://www.restapitutorial.com/ • Video & Articles – https://www.youtube.com/watch?v=5WXYw4J4QOU – ETags: http://www.infoq.com/articles/etags – Manage REST API versions: http://stackoverflow.com/questions/20198275/how-to-manage-rest-api- versioning-with-spring?answertab=votes#tab- tophttp://stackoverflow.com/questions/20198275/how-to-manage-rest-api- versioning-with-spring?answertab=votes#tab-top – Steps towards the glory of REST: http://martinfowler.com/articles/richardsonMaturityModel.html • Examples from presentation: https://github.com/searhiy/REST-examples • Instruments & Tools – https://github.com/spring-projects/spring-data-rest – http://spring.io/blog/2009/03/27/rest-in-spring-3-resttemplate