RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful...
Transcript of RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful...
![Page 1: RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful WebServices in Java. REST architectural style 2.4 REST resource Any (Web)resource Identified](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39aa9c5d399758b564d11a/html5/thumbnails/1.jpg)
RESTful WebServices inJavaRevision : 708
Chantal Taconet
July 2019
![Page 2: RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful WebServices in Java. REST architectural style 2.4 REST resource Any (Web)resource Identified](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39aa9c5d399758b564d11a/html5/thumbnails/2.jpg)
1 Introduction
1. Introduction1.1 REST API examples
2. REST architectural style
3. Marshalling/unmarshalling
4. Hyper Text Transfer Protocol: basics reminder
5. From a Java instance to a neutral representation
6. Java RESTful service
7. Synthethis and go further
2/31 07/2019 Chantal Taconet RESTful WebServices in Java
![Page 3: RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful WebServices in Java. REST architectural style 2.4 REST resource Any (Web)resource Identified](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39aa9c5d399758b564d11a/html5/thumbnails/3.jpg)
1.1 REST API examples� REST is a “URL friendly” way to retrieve distributed resources� Well known examples of REST resources
• Twitter: API
• Google maps: API
where is this place http://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452
URL to get an address in Evry with GPS: lat=48.625595, lon=2.443234
• Open street map API
Where is this place http://nominatim.openstreetmap.org/reverse?lat=48.858518&lon=2.294524&addressdetails=1
• State of bike stations in Lyon, API− https://api.jcdecaux.com/vls/v1/stations?contract=lyon&apiKey=
91f170cdabb4c3227116c3e871a63e8d3ad148ee
3/31 07/2019 Chantal Taconet RESTful WebServices in Java
![Page 4: RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful WebServices in Java. REST architectural style 2.4 REST resource Any (Web)resource Identified](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39aa9c5d399758b564d11a/html5/thumbnails/4.jpg)
2 REST architectural style
1. Introduction
2. REST architectural style2.1 REST: Representational State Transfer2.2 Constraint : Client-server architecture: independance between the client
and the server2.3 Constraint : Stateless2.4 REST resource2.5 URI Naming conventions2.6 Uniform interface: CRUD operations2.7 Are these operations sufficient to build an application?2.8 HATEOAS
Hypermedia as the Engine of Application State
3. Marshalling/unmarshalling
4. Hyper Text Transfer Protocol: basics reminder
5. From a Java instance to a neutral representation
6. Java RESTful service
7. Synthethis and go further
4/31 07/2019 Chantal Taconet RESTful WebServices in Java
![Page 5: RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful WebServices in Java. REST architectural style 2.4 REST resource Any (Web)resource Identified](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39aa9c5d399758b564d11a/html5/thumbnails/5.jpg)
REST architectural style
2.1 REST: Representational State Transfer
� Architectural style defined by Roy Fielding in 2000 [Fielding, 2000]
� Described by six identified constraints• Client/server architecture: independance between the client and the server• Stateless: no client context on the server =⇒ client requests include all the
necessary context• Cacheable: clients can cache responses• Layered system: clients and servers may be connected through intermediate
layers (e.g. proxies)• Code on demand: the state may include code (e.g. javascript)• Uniform interface between clients and servers
� World Wide Web conforms to the REST architectural style
� Applications that conform to this architectural style are called RESTful
� Main advantages: scalability, simplicity of interfaces
5/31 07/2019 Chantal Taconet RESTful WebServices in Java
![Page 6: RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful WebServices in Java. REST architectural style 2.4 REST resource Any (Web)resource Identified](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39aa9c5d399758b564d11a/html5/thumbnails/6.jpg)
REST architectural style
2.2 Constraint : Client-server architecture: inde-pendance between the client and the server
request
request
handler
reply
Synchronous call
wait
client:Process server:Process
� Separate the user interface concerns from the data storage concerns� Portability across multiple platforms� Allows the components to evolve independently
6/31 07/2019 Chantal Taconet RESTful WebServices in Java
![Page 7: RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful WebServices in Java. REST architectural style 2.4 REST resource Any (Web)resource Identified](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39aa9c5d399758b564d11a/html5/thumbnails/7.jpg)
REST architectural style
2.3 Constraint : StatelessFrom Roy Fielding dissertation :� Each request from client to server must contain all of the information
necessary to understand the request, and cannot take advantage of anystored context on the server.
� Session state is therefore kept entirely on the client.
Advantage of the stateless constraint
� Scalability: as each request may be handled by a different server, thenumber of servers may be augmented as necessary
7/31 07/2019 Chantal Taconet RESTful WebServices in Java
![Page 8: RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful WebServices in Java. REST architectural style 2.4 REST resource Any (Web)resource Identified](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39aa9c5d399758b564d11a/html5/thumbnails/8.jpg)
REST architectural style
2.4 REST resource
� Any (Web) resource
� Identified by a global identifier (e.g. URI [Uniform Resource Identification])
� State of a resource may be transfered through a representation of thisresource
8/31 07/2019 Chantal Taconet RESTful WebServices in Java
![Page 9: RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful WebServices in Java. REST architectural style 2.4 REST resource Any (Web)resource Identified](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39aa9c5d399758b564d11a/html5/thumbnails/9.jpg)
REST architectural style
2.5 URI Naming conventions
� Collection of resources: e.g., /skiers
� Single resource: e.g., /skiers/{skierid}
• {skierid} is a parameter path
� Subcollection: e.g., /skiers/{skierid}/achievements
� Single resource: e.g., /skiers/{skierid}/achievements/achievementId
� Controller: e.g., /skiers/{skierid}/change-name/{new-name}
� Find: /skiers?age=41
• age is a query parameter
When resources are named well: an API is intuitive and easy to use.
If done poorly, that same API can feel difficult to use and understand.
9/31 07/2019 Chantal Taconet RESTful WebServices in Java
![Page 10: RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful WebServices in Java. REST architectural style 2.4 REST resource Any (Web)resource Identified](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39aa9c5d399758b564d11a/html5/thumbnails/10.jpg)
REST architectural style
2.6 Uniform interface: CRUD operations
� Requests and responses are built around the transfer of representations ofresources
� Requests are one of the four CRUD Operations:
• Create resource 7→ POST http method• Read resource 7→ GET http method• Update resource 7→ PUT http method• Delete resource 7→ DELETE http method
10/31 07/2019 Chantal Taconet RESTful WebServices in Java
![Page 11: RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful WebServices in Java. REST architectural style 2.4 REST resource Any (Web)resource Identified](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39aa9c5d399758b564d11a/html5/thumbnails/11.jpg)
REST architectural style
2.7 Are these operations sufficient to build anapplication?
Resource Create Read Update DeletePOST GET PUT DELETE
Collection Create entry List entries Replace collection Delete collectionElement / Get element Replace element Delete element
11/31 07/2019 Chantal Taconet RESTful WebServices in Java
![Page 12: RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful WebServices in Java. REST architectural style 2.4 REST resource Any (Web)resource Identified](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39aa9c5d399758b564d11a/html5/thumbnails/12.jpg)
REST architectural style
2.8 HATEOASHypermedia as the Engine of Application State
What is it: including hypermedia links into a resource stateObjective
� A client of a REST application need only to know a single fixed URL
� Related resources should be discoverable dynamically from that URL
HOW: Hyperlinks included in the representations of returned resources
JSON EXAMPLE1 {2 ”person”: {3 ”name”: Kelly,4 },5 ”links”: {6 ”rel”:”achievements”,7 ”href”: ”http://localhost:8090/skier/kelly/achievements”8 }9 }
10 }
12/31 07/2019 Chantal Taconet RESTful WebServices in Java
![Page 13: RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful WebServices in Java. REST architectural style 2.4 REST resource Any (Web)resource Identified](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39aa9c5d399758b564d11a/html5/thumbnails/13.jpg)
3 Marshalling/unmarshalling
1. Introduction
2. REST architectural style
3. Marshalling/unmarshalling3.1 From resource, to remote resource3.2 Marshalling and unmarshalling3.3 Representation formats
4. Hyper Text Transfer Protocol: basics reminder
5. From a Java instance to a neutral representation
6. Java RESTful service
7. Synthethis and go further13/31 07/2019 Chantal Taconet RESTful WebServices in Java
![Page 14: RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful WebServices in Java. REST architectural style 2.4 REST resource Any (Web)resource Identified](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39aa9c5d399758b564d11a/html5/thumbnails/14.jpg)
Marshalling/unmarshalling
3.1 From resource, to remote resource
@path(addSkier) @POST
client
}
addSkier(Skier){
return skiers;
...
implementationclient};
Interface (contract)
interface SkiersRemoteInterface {
communication
messages
Skiers addSkier (Skier skier);
client
implementation
path(addSkier).skiers=service.
post(skier)
implementation
14/31 07/2019 Chantal Taconet RESTful WebServices in Java
![Page 15: RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful WebServices in Java. REST architectural style 2.4 REST resource Any (Web)resource Identified](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39aa9c5d399758b564d11a/html5/thumbnails/15.jpg)
Marshalling/unmarshalling
3.2 Marshalling and unmarshalling
� Marshalling : Java instance to one representation
� Unmarshalling : one representation to Java instance
XML
JSON
...
network neutral format
addSkier(skier){
...
return skiers;
}
client
marshalling
implementation
arguments(skier)
unmarshallingresults(skiers)
unmarshallingarguments
(skier)
results
marshalling
(skiers)
http message
http message
skiers=service.
post(skier) path(addSkier).
15/31 07/2019 Chantal Taconet RESTful WebServices in Java
![Page 16: RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful WebServices in Java. REST architectural style 2.4 REST resource Any (Web)resource Identified](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39aa9c5d399758b564d11a/html5/thumbnails/16.jpg)
Marshalling/unmarshalling
3.3 Representation formats
� Resources are distinct from their possible representations
� Format of a representation (i.e. content type) is defined by anInternet media type (previously known as a MIME type)
� Some common formats
• plain text: text/plain• html: text/html• xml: text/xml, application/xml• code: application/javascript• json: application/json• image: image/jpeg, image/png, image/*• video: video/mpeg
16/31 07/2019 Chantal Taconet RESTful WebServices in Java
![Page 17: RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful WebServices in Java. REST architectural style 2.4 REST resource Any (Web)resource Identified](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39aa9c5d399758b564d11a/html5/thumbnails/17.jpg)
4Hyper Text Transfer Protocol: basics reminder
1. Introduction
2. REST architectural style
3. Marshalling/unmarshalling
4. Hyper Text Transfer Protocol: basics reminder4.1 HTTP GET Request message4.2 HTTP GET Response message4.3 HTTP GET give it a try4.4 HTTP GET vs POST
5. From a Java instance to a neutral representation
6. Java RESTful service
7. Synthethis and go further17/31 07/2019 Chantal Taconet RESTful WebServices in Java
![Page 18: RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful WebServices in Java. REST architectural style 2.4 REST resource Any (Web)resource Identified](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39aa9c5d399758b564d11a/html5/thumbnails/18.jpg)
Hyper Text Transfer Protocol: basics reminder
4.1 HTTP GET Request message
1 GET /hello HTTP/1.12 Accept: text/plain, text/html3 %−−−empty line: end of header
� Sent to a web server to access one of its web resource
• Request message (message method, identification of the resource inside theserver, HTTP version)
− For instance: GET /hello HTTP/1.1• Request Headers
− accepted content types (e.g. Accept: text/plain, text/html)− accepted charsets (e.g. Accept-Charset: utf-8)− cookie (e.g. Cookie: Version=1; Skin=new;)
• Request body (empty for a get)
18/31 07/2019 Chantal Taconet RESTful WebServices in Java
![Page 19: RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful WebServices in Java. REST architectural style 2.4 REST resource Any (Web)resource Identified](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39aa9c5d399758b564d11a/html5/thumbnails/19.jpg)
Hyper Text Transfer Protocol: basics reminder
4.2 HTTP GET Response message1 HTTP/1.1 200 OK return code2 Date: Mon, 11 Nov 2013 17:47:24 GMT header (begin)3 Server: Apachee/2.2.3 (Debian GNU/Linux)4 Perl/v5.8.4 PHP/5.2.65 Last−Modified: Wed, 28 Apr 2012 15:55:02 GMT6 Content−length: 3277 Content−type: text/html8 empty line (end of header)9 <HTML> content
10 ... document HTML11 </HTML>
� Return code (line 1)• 100 - 199: Information message• 200 - 299: Success (e.g., 200 OK)• 300 - 399: Redirections• 400 - 499 : client-side errors (e.g., 404 Not Found, 403 Forbidden)• 500 - 599 : server-side errors (e.g., 500 Internal Server Error)
� Header (line 2–7)� Resource content (line 9-11)
19/31 07/2019 Chantal Taconet RESTful WebServices in Java
![Page 20: RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful WebServices in Java. REST architectural style 2.4 REST resource Any (Web)resource Identified](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39aa9c5d399758b564d11a/html5/thumbnails/20.jpg)
Hyper Text Transfer Protocol: basics reminder
4.3 HTTP GET give it a tryGive it a try
1. Visualize this simple page on your favourite navigatorhttp://checkip.dyndns.org/ and vizualize the headers with the networkinspector of your navigator
2. Visualize the result with the curl command1 curl http://checkip.dyndns.org/
3. Connect to the web server with the telnet command1 telnet checkip.dyndns.org 802 GET / HTTP/1.13 HOST: checkip.dyndns.org
4. Use the REST client plugin on your navigator (e.g., Firefox RestClientaddon)
20/31 07/2019 Chantal Taconet RESTful WebServices in Java
![Page 21: RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful WebServices in Java. REST architectural style 2.4 REST resource Any (Web)resource Identified](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39aa9c5d399758b564d11a/html5/thumbnails/21.jpg)
Hyper Text Transfer Protocol: basics reminder
4.4 HTTP GET vs POST I
� GET method, gets data, it has no input
� For input, use POST to create or PUT to update
� For HTML forms, which do have inputs, you may see GET with a modifiedURL but it is not recommanded
21/31 07/2019 Chantal Taconet RESTful WebServices in Java
![Page 22: RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful WebServices in Java. REST architectural style 2.4 REST resource Any (Web)resource Identified](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39aa9c5d399758b564d11a/html5/thumbnails/22.jpg)
Hyper Text Transfer Protocol: basics reminder
4.4 HTTP GET vs POST IIMethod GET POSTHTML <form method=”GET”
action=”AfficheGET.php”><form method=”POST”action=”AffichePOST.php”>
URL www.my.eu/AfficheGET.php?Nom=Taconet&Prenom=Chantal
www.my.eu/AffichePOST.html
HTTPmessage
GET /AfficheGET.php?Nom=Taconet&Prenom=ChantalHTTP/1.1
POST /AffichePOST.htmlHTTP/1.1
header Host: www.my.eu Host: www.my.euContent-Type: application/x-www-form-urlencodedContent-length: 27
bodyNom=Taconet&Prenom=Chantal
22/31 07/2019 Chantal Taconet RESTful WebServices in Java
![Page 23: RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful WebServices in Java. REST architectural style 2.4 REST resource Any (Web)resource Identified](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39aa9c5d399758b564d11a/html5/thumbnails/23.jpg)
Hyper Text Transfer Protocol: basics reminder
4.4 HTTP GET vs POST III
� Give it a try with a curl client
1 curl --request POST --data \'Nom=Taconet&Prenom=Chantal' \http://www-public.imtbs-tsp.eu/˜taconet/REST/AffichePOST.php
1 curl \http://www-public.imtbs-tsp.eu/˜taconet/REST/AfficheGET.php?Nom=Taconet&Prenom=Chantal
� Give it a try with a REST client in your browser
23/31 07/2019 Chantal Taconet RESTful WebServices in Java
![Page 24: RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful WebServices in Java. REST architectural style 2.4 REST resource Any (Web)resource Identified](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39aa9c5d399758b564d11a/html5/thumbnails/24.jpg)
6 Java RESTful service
6. Java RESTful service6.1 RESTful web service architecture6.2 Java Client example
24/31 07/2019 Chantal Taconet RESTful WebServices in Java
![Page 25: RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful WebServices in Java. REST architectural style 2.4 REST resource Any (Web)resource Identified](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39aa9c5d399758b564d11a/html5/thumbnails/25.jpg)
Java RESTful service
6.1 RESTful web service architectureHTTP
Lightweight
Web server
JAX−RS
JAX−RS
Client Server
JEE container
25/31 07/2019 Chantal Taconet RESTful WebServices in Java
![Page 26: RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful WebServices in Java. REST architectural style 2.4 REST resource Any (Web)resource Identified](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39aa9c5d399758b564d11a/html5/thumbnails/26.jpg)
Java RESTful service
6.2 Java Client example
(ExemplesREST/JAXREST-01)1 restURI = ”http://” + properties.getProperty(”rest.serveraddress”) + ”/MyServer”;2 Client client = ClientBuilder.newClient();3 URI uri = UriBuilder.fromUri(restURI).build();4 WebTarget service = client.target(uri);5 service.path(”hello”).path(”replace”).request().put(Entity.text(”coucou”));6 String getResult= service.path(”hello”).request().accept(MediaType.TEXT_PLAIN).get(String.class);7 service.path(”hello”).path(”delete”).request().delete();
� path(”hello”): subpath (or path parameters)
� request(): create an http request for the path
� accept(MediaType.TEXTPLAIN): accepted representation format
� get(String.class): message http GET, the return body is converted into astring
26/31 07/2019 Chantal Taconet RESTful WebServices in Java
![Page 27: RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful WebServices in Java. REST architectural style 2.4 REST resource Any (Web)resource Identified](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39aa9c5d399758b564d11a/html5/thumbnails/27.jpg)
7 REST Synthesis
� Easy to write and easy to test RESTful WebServices and REST clients
• As a consequence, a high percentage of deployed web services are RESTfulservices
27/31 07/2019 Chantal Taconet RESTful WebServices in Java
![Page 28: RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful WebServices in Java. REST architectural style 2.4 REST resource Any (Web)resource Identified](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39aa9c5d399758b564d11a/html5/thumbnails/28.jpg)
7 REST and microservices I
Microservice architectureA microservice is a software architectural style that structures an applicationas a collection of loosely coupled services. Advantages:
Advantages
� modularity
� continuous delivery
� better scalability
28/31 07/2019 Chantal Taconet RESTful WebServices in Java
![Page 29: RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful WebServices in Java. REST architectural style 2.4 REST resource Any (Web)resource Identified](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39aa9c5d399758b564d11a/html5/thumbnails/29.jpg)
7 REST and microservices II
Microservices interaction patterns
� Services in a microservice architecture are often processes that communicateover a network
• For synchronous interactions: REST over HTTP (one of the most popular)• For Asynchronous interactions: AMQP and Akka actors are good candidates
29/31 07/2019 Chantal Taconet RESTful WebServices in Java
![Page 30: RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful WebServices in Java. REST architectural style 2.4 REST resource Any (Web)resource Identified](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39aa9c5d399758b564d11a/html5/thumbnails/30.jpg)
Synthethis and go further
7.1 Some links to be studied
� Web browser REST Client plug-in
� retrofit annotations to write REST clienthttp://square.github.io/retrofit/
� swagger language-agnostic interface to REST APIshttp://swagger.io/getting-started/
30/31 07/2019 Chantal Taconet RESTful WebServices in Java
![Page 31: RESTful WebServices in Java - Télécom SudParis · 7/31 07/2019 Chantal Taconet RESTful WebServices in Java. REST architectural style 2.4 REST resource Any (Web)resource Identified](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39aa9c5d399758b564d11a/html5/thumbnails/31.jpg)
References
Burke, B. (2010).
RESTful Java.
O’Reilly.
Fielding, R. T. (2000).
REST Architectural Styles and the Design of Network-based Software Architectures.
Doctoral dissertation, University of California, Irvine.
Kalin, M. (2010).
Java Web Services, Up and Running.
O’Reilly.
31/31 07/2019 Chantal Taconet RESTful WebServices in Java