02267: Software Development of Web Services

Similar documents
02267: Software Development of Web Services

Distribution and Integration Technologies

REST API Development. B. Mason Netapp E-Series

REST vs. SOAP: Making the Right Architectural Decision

REST web services. Representational State Transfer Author: Nemanja Kojic

Designing RESTful Web Applications

Security Testing For RESTful Applications

CONTRACT MODEL IPONZ DESIGN SERVICE VERSION 2. Author: Foster Moore Date: 20 September 2011 Document Version: 1.7

Lecture Notes course Software Development of Web Services

Cloud Elements! Marketing Hub Provisioning and Usage Guide!

soapui Product Comparison

Mobility Information Series

WEB SERVICES. Revised 9/29/2015

Application layer Web 2.0

Apache CXF Web Services

WEB SERVICES TEST AUTOMATION

HTTP Protocol. Bartosz Walter

SOA CERTIFIED JAVA DEVELOPER (7 Days)

REST services in Domino - Domino Access Services

Developing a Web Server Platform with SAPI Support for AJAX RPC using JSON

Enabling REST Services with SAP PI. Michael Le Peter Ha

XML Processing and Web Services. Chapter 17

Computer Networks. Lecture 7: Application layer: FTP and HTTP. Marcin Bieńkowski. Institute of Computer Science University of Wrocław

Remote Access API 2.0

What is Distributed Annotation System?

Hello World RESTful web service tutorial

Principles and Foundations of Web Services: An Holistic View (Technologies, Business Drivers, Models, Architectures and Standards)

Session 6 Patterns and best practices in SOA/REST

Accessing Data with ADOBE FLEX 4.6

Web. Services. Web Technologies. Today. Web. Technologies. Internet WWW. Protocols TCP/IP HTTP. Apache. Next Time. Lecture # Apache.

JASPERREPORTS SERVER WEB SERVICES GUIDE

Domain Name System (DNS)

02267: Software Development of Web Services

A Comparison of Service-oriented, Resource-oriented, and Object-oriented Architecture Styles

Integrating Complementary Tools with PopMedNet TM

Cross-domain Identity Management System for Cloud Environment

Types of Cloud Computing

Web Services API Developer Guide

Fairsail REST API: Guide for Developers

Performance Testing for Ajax Applications

JVA-561. Developing SOAP Web Services in Java

Common definitions and specifications for OMA REST interfaces

MathCloud: From Software Toolkit to Cloud Platform for Building Computing Services

SoapUI NG Pro and Ready! API Platform Two-Day Training Course Syllabus

Web Services ( )

Developing Java Web Services

The full setup includes the server itself, the server control panel, Firebird Database Server, and three sample applications with source code.

SOA CERTIFIED CONSULTANT

WIRIS quizzes web services Getting started with PHP and Java

Integration Knowledge Kit Developer Journal

Literature Review Service Frameworks and Architectural Design Patterns in Web Development

Progress OpenEdge REST

Java Web Services Training

Design REST Services with CXF JAX- RS implementation: best practices and lessons learned

Reusing Existing * Java EE Applications from Oracle SOA Suite

Chapter 1: Web Services Testing and soapui

Creating Web Services in NetBeans

T Network Application Frameworks and XML Web Services and WSDL Tancred Lindholm

ITS. Java WebService. ITS Data-Solutions Pvt Ltd BENEFITS OF ATTENDANCE:

Cloud Powered Mobile Apps with Microsoft Azure

EAI OVERVIEW OF ENTERPRISE APPLICATION INTEGRATION CONCEPTS AND ARCHITECTURES. Enterprise Application Integration. Peter R. Egli INDIGOO.

WA2087 Programming Java SOAP and REST Web Services - WebSphere 8.0 / RAD 8.0. Student Labs. Web Age Solutions Inc.

Web application development landscape: technologies and models

GlassFish. Developing an Application Server in Open Source

Web Service Testing. SOAP-based Web Services. Software Quality Assurance Telerik Software Academy

Integration of Hotel Property Management Systems (HPMS) with Global Internet Reservation Systems

vcloud Air Platform Programmer's Guide

Securing JAX-RS RESTful services. Miroslav Fuksa (software developer) Michal Gajdoš (software developer)

Intruduction to Groovy & Grails programming languages beyond Java

Nuance Mobile Developer Program. HTTP Services for Nuance Mobile Developer Program Clients

Some REST Design Patterns (and Anti-Patterns)

The presentation explains how to create and access the web services using the user interface. WebServices.ppt. Page 1 of 14

Internet Technologies. World Wide Web (WWW) Proxy Server Network Address Translator (NAT)

MINISTRY OF FINANCE SYSTEM INTEGRATION PLAN ATTACHMENT NR 2 SEAP XML SPECIFICATION WEBSERVICE INTERFACE FOR EXTERNAL SYSTEMS PROJECT ECIP/SEAP

JBoss SOAP Web Services User Guide. Version: M5

Web Development. Owen Sacco. ICS2205/ICS2230 Web Intelligence

THE PROXY SERVER 1 1 PURPOSE 3 2 USAGE EXAMPLES 4 3 STARTING THE PROXY SERVER 5 4 READING THE LOG 6

Getting Started with Service- Oriented Architecture (SOA) Terminology

Web Services Tutorial

RESTful web services & mobile push architectures

T320 E-business technologies: foundations and practice

Core Feature Comparison between. XML / SOA Gateways. and. Web Application Firewalls. Jason Macy jmacy@forumsys.com CTO, Forum Systems

Integration of. ERP systems and epages 6. with Web services

HOST EUROPE CLOUD STORAGE REST API DEVELOPER REFERENCE

Easy CramBible Lab DEMO ONLY VERSION Test284,IBM WbS.DataPower SOA Appliances, Firmware V3.6.0

10CS73:Web Programming

Performance Testing Web 2.0

Contents. 2 Alfresco API Version 1.0

An Oracle White Paper June RESTful Web Services for the Oracle Database Cloud - Multitenant Edition

TIBCO JASPERREPORTS SERVER WEB SERVICES GUIDE

A Comparison of Service-oriented, Resource-oriented, and Object-oriented Architecture Styles

HexaCorp. White Paper. SOA with.net. Ser vice O rient ed Ar c hit ecture

OpenScape Voice V8 Application Developers Manual. Programming Guide A31003-H8080-R

Open-ESB tutorials. Schema and Encoding: Import a CSV file. Paul Perez / Bruno Sinkovic. Copyright Pymma Consulting (2009)

Transcription:

02267: Software Development of Web Services Week 8 Hubert Baumeister huba@dtu.dk Department of Applied Mathematics and Computer Science Technical University of Denmark Fall 2013

Contents RESTful Services Resources Representations JSON WADL Summary RESTful Services Part 1 Project Introduction

RESTful Web Services RESTful Web services: based on the structure of the Web as defined through HTTP 1) based on the concepts of resources indentified by URI s Media types (e.g. plain text, XML, HTML,..., other MIME types) define the representation of the resources 2) HTTP Methods (GET, POST, PUT, DELETE) act on the resources CRUD (Create, Read, Update, and Delete) RESTful Web services define what these operations mean for a particular resource 3) uses HTTP status codes (e.g. 200 ok; 201 created;..., 500 internal server error)

REST = Representational State Transfer REST is an architecture style defined by Roy Fielding, one of the authors of HTTP 1.0 and 1.1 Characteristics Client-server Stateless The server does not hold any application state (e.g. state regarding a session); all the information needs to be provided by the client improves scalability Cachebale Uniform Interface use of standard methods, e.g. GET, POST,... use of standard representation, e.g. MIME types

Uniform Interface GET: Get a resource Does not change the state of the resource Is idempotent can be cached Only simple parameters PUT: Update a resource Should replace the old representation by a new one Complex content in the body of a HTTP request DELETE: Delete a resource POST: Do something with the resource (general purpose method) Complex content in the body of a HTTP request URL encoded form parameter

Student Registration Classical Web Services focus on services (= operations) RESTful Web Services focus on resources URI Path ---------------------------------------------------------------------- Resource Class HTTP Methods /institute InstituteResource GET, PUT /institute/address InstituteResource GET, PUT /students StudentsResource GET, POST /students/{id} StudentResource GET, PUT, DELETE

Student Registration: Institute Resource Institute resource When accessing http://localhost: 8080/sr/webresources/intitute using GET, DTU is returned Accessing the same URL using PUT with a string, the name of the institution is changed URI Path Resource Class HTTP Methods ---------------------------------------------------------------------- /institute InstituteResource GET, PUT Bottom up development: 1 JAX-RS annotated client (2) WADL (Web Application Description Language) 3 Client using Jersey

Using GET on institute resource Request GET /sr/webresources/institute HTTP/1.1 Accept: text/plain Host: 127.0.0.1:8070 Response HTTP/1.1 200 OK Content-Type: text/plain DTU

Using PUT on institute resource Request PUT /sr/webresources/institute HTTP/1.1 Accept: text/plain Content-Type: text/plain Host: localhost:8070 Danmark Tekniske Universitet Response HTTP/1.1 204 No Content

Java implementation: JAX-RS annotations package ws.dtu; import javax.ws.rs.get; import javax.ws.rs.put; import javax.ws.rs.path; import javax.ws.rs.core.mediatype; @Path("institute") public class InstituteResource { private static String name = "DTU"; @GET @Produces(MediaType.TEXT_PLAIN) public String getinstitutename() { return name; } @PUT @Consumes(MediaType.TEXT_PLAIN) public void setinstitutename(string input) { name = input; } } @Path("reset") // Resets the name for testing purposes @PUT public void reset() { name = "DTU"; }

RESTful Client using Jersey import com.sun.jersey.api.client.client; import com.sun.jersey.api.client.webresource;... public class TestInstituteResource { Client client = Client.create(); WebResource r = client.resource("http://localhost:8070/sr/webresources/institute"); @Test public void testgetinstitutename() { String result = r.get(string.class); assertequals("dtu",result); } @Test public void testputinstitutename() { String expected = "Danmarks Tekniske Universitet"; r.put(expected); assertequals(expected,r.get(string.class)); } @Before public void resetinstitutename() { r.path("reset").put(); } }

Contents RESTful Services Resources Representations JSON WADL Summary RESTful Services Part 1 Project Introduction

Student Registration extended Classical Web Services focus on services (= operations) RESTful Web Services focus on resources Two types of resources: students (the list of all students) and student (one student) Basic operations like register student, search student, access student data, update student data and delete student data is mapped to the appropriate HTTP method URI Path ---------------------------------------------------------------------- Resource Class HTTP Methods /institute InstituteResource GET, PUT /institute/address InstituteResource GET, PUT /students StudentsResource GET, POST /students/{id} StudentResource GET, PUT, DELETE A particular student is accessed by its id, e.g. /students/123

Example: Student Registration Implementation A resource path corresponds to one implementation class StudentsResource (note the plural) import javax.ws.rs.*; @Path("students") public class StudentsResource { @POST @Consumes(MediaType.APPLICATION_XML) @Produces(MediaType.TEXT_PLAIN) public String registerstudent(student st) {... } } @GET @Produces(MediaType.TEXT_PLAIN) public String findstudent(@queryparam("name") String name) {... } @QueryParam allows access to a query parameter, e.g. students?name=nielsen Conversion from and to XML if XmlRootElement() is used @javax.xml.bind.annotation.xmlrootelement() public class Student {... }

Example: Student Registration Implementation Class StudentResource @Path("students/{id}") public class StudentResource { @GET @Produces(MediaType.APPLICATION_XML) public Student getstudent(@pathparam("id") String id){.. } @PUT @Produces(MediaType.APPLICATION_XML) public Student setstudent(@pathparam("id") String id, Student std) } @DELETE @Produces(MediaType.TEXT_PLAIN) public String deletestudent(@pathparam("id") String id, Student std) {.. } id in the path is replaced by the actual id of the student @PathParam( id ) allows to map that path component to a paramter in the Java method

Example: Student Registration: Usage CURL (http://curl.haxx.se/: sending HTTP requests via the command line Search for students curl http://localhost:8080/sr/resources/students\?name=fleming Register a new student curl -X POST \ --data "<student><id>123</id><name>jimmy Jones</name></studen http://localhost:8080/sr/resources/students Accessing the data of 345 curl http://localhost:8080/sr/resources/students/345 Updating the data of student 456 curl -X PUT \ --data "<student><name>jimmy Jones</name></student>" \ http://localhost:8080/sr/resources/students/456 Deleting an item curl -X DELETE http://localhost:8080/sr/resources/students/456

Example: Student Registration Usage WebResource r = Client.create().resource("http://localhost:8070/sr/webresources/students") Search for a student String id = r.queryparam("name","fleming").get(string.class) Register a new student Student student = new Student(); student.setname(..);... String id = r.post(student); Accessing the data of 345 Student s = r.path("345").get(student.class); Updating the data of student 456 Student student = new Student();... Student s = r.path("456").entity(student,mediatype.application_xml).put(student.class); Deleting an item String res = r.path("456").delete(string.class);

Contents RESTful Services Resources Representations JSON WADL Summary RESTful Services Part 1 Project Introduction

Multiple Representations registerstudent: data provided as XML or JSON @POST @Consumes("application/xml") public String registerstudentxml(student st) { String url = "http://localhost:8080/sr/resources/students/"; return url+st.getid(); } @POST @Consumes("application/json") public String registerstudentjson(student student) { String url = "http://localhost:8080/sr/resources/students/"; return url + student.getid(); }

HTTP Request JSON POST /sr/resources/students HTTP/1.1 Accept: */* Content-Type: application/json User-Agent: Java/1.6.0_37 Host: localhost:8070 Connection: keep-alive Transfer-Encoding: chunked 21 {"id":"133","name":"jimmy Jones"} 0 XML POST /sr/resources/students HTTP/1.1 Accept: */* Content-Type: application/xml User-Agent: Java/1.6.0_37 Host: localhost:8070 Connection: keep-alive Transfer-Encoding: chunked 6e <?xml version="1.0" encoding="utf-8" standalone="yes"?> <student> <id>133</id> <name>jimmy Jones</name> </student>

Contents RESTful Services Resources Representations JSON WADL Summary RESTful Services Part 1 Project Introduction

JSON: JavaScript Object Notation Syntax: http://www.json.org Eg. object { "name" : "Johan", "id" : 123 } Eg. array of objects [ { "name" : "Johan", "id" : 123 }, { "name" : "Jakob", "id" : 423 } ]

JSON lightweight { "name" : "Johan", "id" : 123 } <?xml version="1.0" encoding="utf-8" standalone="yes"?> <student> <name>johan</name> <id>123</id> </student> But <?xml version="1.0" encoding="utf-8" standalone="yes"?> <student name="johan" id="123"/>

JSON Easy to use with Javascript, e.g. var student = eval("("+ jsonstring + ")") But: Security risk Better var student = JSON.parse(jsonString)

JSON vs. XML Untyped (JSON) vs typed (XML Schema) Easier parser (JSON) Ease to work with in Javascript (JSON) But use of special parser recommended

Multiple Representations getstudent: data returned as XML or JSON @GET @Produces("application/xml") public Student getstudentxml(@pathparam("id") String id) {; return students.get(id); } @GET @Produces("application/json") public Student getstudentjson(@pathparam("id") String id) { return students.get(id); }

HTTP Request XML GET /sr/resources/students/123 HTTP/1.1 Accept: application/xml User-Agent: Java/1.6.0_37 Host: localhost:8070 Connection: keep-alive JSON GET /sr/resources/students/123 HTTP/1.1 Accept: application/json User-Agent: Java/1.6.0_37 Host: localhost:8070 Connection: keep-alive

Contents RESTful Services Resources Representations JSON WADL Summary RESTful Services Part 1 Project Introduction

WADL WADL (Web Application Description Language) Abstract description of REST services same function as WSDL for Web services based on SOAP WSDL 2.0 has also support for RESTful Web services

StudentRegistration WADL: Part 1 <application xmlns="http://research.sun.com/wadl/2006/10"> <resources base="http://localhost:8080/sr/resources/"> <resource path="students/{id}"> <param xmlns:xs="http://www.w3.org/2001/xmlschema" type="xs:string" style="template" name="id"/> <method name="get" id="getstudentjson"> <response> <representation mediatype="application/json"/> </response> </method>... </resource>

StudentRegistration WADL: Part II <resource path="students"> <method name="post" id="registerstudentxml"> <request> <representation mediatype="application/xml"/> </request> <response> <representation mediatype="*/*"/> </response> </method> <method name="get" id="findstudent"> <request> <param xmlns:xs="http://www.w3.org/2001/xmlschema" type="xs:string" style="query" name="name"/> </request> <response> <representation mediatype="*/*"/> </response> </method> </resource> </resources> </application>

Contents RESTful Services Resources Representations JSON WADL Summary RESTful Services Part 1 Project Introduction

Difference to SOAP based Web services REST Web services use the concept of resources rely and use the semantics of the HTTP protocol (HTTP verbs, media types, HTTP status codes) are tailored to HTTP and Web architecture: e.g. caching using proxies different types of resource representations: text XML, JSON, HTML, binary,... SOAP based Web services use the concept of services HTTP is one possible transport protocol, but SOAP does not rely on HTTP HTTP verbs are irrelevant; the semantic of an operation is found in the SOAP message (e.g. register student) One representation for data: XML defined using XML schema

Next week Error Handling Business Proceses with RESTful services

Contents RESTful Services Resources Representations JSON WADL Summary RESTful Services Part 1 Project Introduction

Exam project introduction TravelGood TravelGood is a travel agency allowing to manage itineraries, book them, and possibly cancel them Business Process Planning phase: get flight/hotel information, add flight/hotels to itineraries Booking phase: book the itinerary Cancel phase: possibly cancel the itinerary Trips consists of flights and hotels possible several flights and hotels flights are always one-way TravelGood works together with Airline Reservation Agency: LameDuck Hotel Reservation Agency: NiceView Bank: FastMoney will be provided at http://fastmoney.imm.dtu.dk:8080

Tasks (I) 1 Write a section on Web services (SOAP-based and RESTful) 2 Show the coordination protocol between the client and the travel agency as a state machine 3 Two implementations Implement the Web services from the previous slide Define the appropriate data structures Services of LameDuck and NiceView a. TravelGood as a BPEL process b. TravelGood as RESTful services

Tasks (2) 4 Create the JUnit tests testing the major behaviour of the planning, booking and cancelling 5 Web service discovery Create WSIL files describing the services each company offers 6 Compare BPEL implementation with RESTful implementation 7 Advanced Web service technology Discuss WS-Addressing, WS-Reliable Messaging, WS-Security, and WS-Policy

General remarks The implementation can be done using Java with Netbeans but also using any other Web service technology, e.g..net However BPEL must be used for composite Web services All your Web services should be running and have the required JUnit tests or xunit for other programming languages, e.g NUnit for.net During the project presentations you may be asked to show the running system by executing the clients It might be helpful do use some helper services in BPEL processes to do complicated computations. However these helper services are not allowed to call Web services if the helper service is not written in BPEL

Structure of the report 1. Introduction Introduction to Web services 2. Coordination Protocol 3. Web service implementations 3.1 Data structures used 3.2 Airline- and hotel reservation services 3.3 BPEL implementation 3.4 RESTful implementation 4. Web service discovery 5. Comparison between RESTful and SOAP/BPEL Web services 6. Advanced Web service technology 7. Conclusion 8. Who did what No appendices

Reporting: Web service implementations Each Web service should have a short description of what it does and how it is implemented BPEL processes graphical representation of the BPEL process in an understandable way (e.g. you can use several diagrams for showing a BPEL process, e.g. one for the overall structure and others for the details) There is a feature in the BPEL designer of Netbeans to hide details RESTful services What are resources and why? Mapping to HTTP verbs Representation options and choices

What needs to be delivered? Report (report xx.pdf) application xx.zip Source code projects (e.g. Netbeans projects) of the application so that I can deploy and run the projects Implemented Web services Simple services Complex services (BPEL) Tests

Important: Who did what in the project It is important that with each section / subsection it is marked who is responsible for that part of the text. There can only be one responsible person for each part of the text. In addition, each WSDL, XSD, BPEL, Java,... file needs to have an author. Who is author of which file should be listed in the section Who did What in the report Make sure that each member of the group does something of each task (including RESTful WS and BPEL)! Note that you all are responsible that the overall project looks good Team work is among the learning objectives Don t think: I am not responsible for this part, so I don t have to care how this part looks and contributes to the whole

General tips It is likely to get better grades if you all work together and everybody is in fact responsible for every part in the report Prioritise high risk task: Don t put off high risk tasks (like doing the BPEL processes) to the end of the project Not so good: XML schema, WSDL file, Simple Web services, BPEL processes, Test Better: work by user stories: book trip successful (Test, XML schema, WSDL file, Simple Web services, BPEL process), book trip with errors (... ), cancel trip successful (... ),... Try to avoid waiting for each other I can t do the WSDL files, because I am waiting for the other guy doing the XML schemata first

Schedule Forming of project groups happens now Project starts today and finishes Tuesday morning 3.12.12 08:00 Submission of the two files to the assignment module on CampusNet Project presentations will be Monday 16, Tuesday 17, and Wednesday 18.12: participation is mandatory Help Regarding the problem description Technical help Exercise sessions after the lecture will continue through the project period and can be used for technical questions and problem clarifications Please also send your Netbeans projects if you write an e-mail Detailed task description on CampusNet