1 / 23

Programming for RESTful-SOA

Programming for RESTful-SOA. An introduction to building a SOA System with light-weighted RESTful Web Services ( Web Services without SOAP or WSDL) Xiong Haoyi xhyccc @ vip.sina.com Huazhong University of Science and Technology. Review of REST.

kelvin
Download Presentation

Programming for RESTful-SOA

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programming for RESTful-SOA An introduction to building aSOA System with light-weighted RESTful Web Services (Web Services without SOAP or WSDL) Xiong Haoyi xhyccc@vip.sina.com Huazhong University of Science and Technology

  2. Review of REST • REST, means REpresentational State Transfer, was firstly raised by Roy Thomas Fielding in his doctoral thesis --“Architectural Styles and the Design of Network-based Software Architectures”(University of California - Irvine,2000) • Rest, broadly used in the web applications, is considered as the basic architecture of web. • The typical technologies based on REST include WebDAV, Resource-Oriented Web System etc.

  3. Principles of RESTful Programming • URI-Oriented Designing • Linking Anything! • Using the standard Methods of HTTP • Multi-Representation of Resource • Stateless Communication

  4. URI-Oriented Designing • Uniform Resource Identifier--”a compact string of characters used to identify or name a resource on the Internet.” • URI could be the UUID for any Object in this world. • The operations over resource could represent as the operations with the URI.

  5. Example of URI and REST Index to distinct Customer’s Detail with customer id:1234 http://example.com/customerdetails/1234 Index to All Orders in the date of 2007 http://example.com/orders/2007/ Example above Powered by Stefan Tilkov

  6. HTTP Methods and Service Operations • HTTP Methods including GET, POST, DELETE, PUT and HEAD, in some degree, could map to the CRUD actions which are the typical operations towards to resources. • Service Operations , binding with semanteme of transcation, focus on the package of complex process and business activity.

  7. REST vs RPC • REST • Resources—Commands are defined in simple terms: resources to be retrieved, stored / get, set—difficult to do many joins • RPC • Calling—Commands are defined in methods with varying complexity: depending on “standard”—easier to hide complex things behind a method • REST • Nouns—Exchanging resources and concepts • RPC • Verbs—Exchanging methods

  8. REST in Action • RestfulBeansServices, as the main result of our research, now is published as an open source software with the apache license on Google Code under the name of “RESTfulCRUDBeans” • It is a Spring based framework deploying the Pojos as RESTful Web Services.

  9. REST in Action • Sample Code: • Define a RESTful Web Service with annotation package org.lightechs.restfulbeans.sample; import org.lightechs.restfulbeans.annotation.*; …… @DefaultTransformer(name=“TextureTransformer") /*Index to default Representation Transformer Defined in Spring beans*/ public class SampleRESTfulBean{ …… }

  10. REST in Action • Sample Code: • Define a RESTful Web Service Operation with annotation ..... @ReadMethod /*Reading with GET Method*/ @ResourceURI(URI="hello/${id}")/*URI Designing*/ public String getHelloWorld(@PathParam(name="${id}", converter= "Int“ ) int i) { return “Hello!”+i; } … Invoke this operation with URI: GET hello/123 Accept: text /* if the accept fragment is invalid, the server would choose default one*/ Result of Server: Hello!123 (the result depends on the representation of ‘text’)

  11. REST in Action • Sample Code:Transformer Interface package org.lightechs.restfulbeans.transformer; import javax.servlet.http.HttpServletResponse; public interface transformer{ public void doTransformer(Object obj,HttpServletResponse response); /*Object means operation result, response means the HTTP response. Implements this method and define the way reflect in to response stream. */ }

  12. REST in Action • Sample Transformer,Transform String into stream package org.lightechs.restfulbeans.transformer; import javax.servlet.http.HttpServletResponse; import net.sf.json.*; ….. public void doTransformer(Object obj, HttpServletResponse response) { try{ String str=(String)obj; /*if obj is not instance of String, it will throw cast exception to container*/ response.setContentType(“plain/text; charset=utf-8"); PrintWriter pw=reponse.getWriter(); pw.write(str); Pw.close(); }catch(IOException e){ e.printStack(); } } …..

  13. REST in Action • Sample Code: Single String Converter Interface package org.lightechs.restfulbeans.converter; public interface SingleStringConverter extends ConvertInterface{ public Object convert(String str); /*str means the part of URI such as “http://....../Operation/${id}” The part named ${id} would convert int to Object as your wish by implementation of this method. */ }

  14. REST in Action • Sample Converter, Covert String into Integer package org.lightechs.restfulbeans.converter; public class Str2Integer implements SingleStringConverter{ public Object convert(String str) { return new Integer(str); /*if this str is not in the format of integer the methods would throws exception to container*/ } }

  15. REST in Action • Sample Multi-String Converter, Covert Strings into File package org.lightechs.restfulbeans.converter; import java.io.File; public class MultiStr2FilePath implements MultiStringConverter{ public Object convert(String[] strs) {/*Multi-String convert Method*/ String temp=strs[0]; for(int i=1;i<strs.length;i++){ temp+=(File.pathSeparator+strs[i]); } File file=new File(temp); return file; } } Eg: “http://..../operation/Disk:/Path1/Path2/.../File” could index to native file of server side

  16. REST in Action • Annotation of this container • @PathParam : the Parameter in URI Path. • @NamedParam :named parameter in query String. • @HttpRequest :Mutipart fragment of Http Request (eg. file upload) • @ResourceURI :Mapping the URI with PathParams (eg.@ResourceURI(“hello/${id}/.../”)-->@PathParam(name=${id},...) ) • @DefaultTransformer : firm default transformer for the service such as Json, TableList in sample source. • @ReadMethod,@CreateMethod,@UpdateMethod ,@DeleteMethod could mapping the operation into GET,POST,PUT and DELETE Method.

  17. Special RESTful Web Services • QBE (Query By Example)! • Asynchronous Message Queue

  18. Query By Example • URI-Query Mapping Original URI: GET db/STUDENT/hust/2005/ceee/ ACCEPT:NAME+CODE+AGE+SEX/COLLEGE+YEAR+DEPARTMEN T/X-JSON Mapped SQL: SELECT NAME, CODE, AGE, SEX FROM student WHERE COLLEGE=’hust’ AND YEAR=’2005’ AND DEPARTMENT='ceee’

  19. Query By Example

  20. Asynchronous Message Queue • Asynchronous Message Queue over keep-alive HTTP Connection • The Server Response Content-type: multipart/mixed; boundary=”StudentMessage” --StudentMessage Content-type: X-JSON {code:”001”, name:”Sam” ,age=20} --StudentMessage Content-type: X-JSON {code:”002”, name:”Lily” ,age=20} --StudentMessage--

  21. Introduction to Our Team • Our team—LighTECHs which is a student team of HUST focus on Open-Source Java Web Container. • Main Staffs of LighTECHs Xiong Hao-yi : System analyst, Architecture Leader Bie Rui : Sofware Designer, Chief Programmer He Lingli : Software Designer, Interrupter …….

  22. Q&A

More Related