Presentation is loading. Please wait.

Presentation is loading. Please wait.

SE 370: Programming Web Services Week 11: JSON & RESTful Copyright © Steven W. Johnson February 1, 2013.

Similar presentations


Presentation on theme: "SE 370: Programming Web Services Week 11: JSON & RESTful Copyright © Steven W. Johnson February 1, 2013."— Presentation transcript:

1 SE 370: Programming Web Services Week 11: JSON & RESTful Copyright © Steven W. Johnson February 1, 2013

2 asdf Today: 2

3 REST uses JSON to transmit data JSON: 3

4 JavaScript Object Notation Douglas Crockford (2002) JSON: text-based, open data interchange system JSON: 4

5 Purpose: data interchange (kavşak) format serialize data for network transmission passes objects as strings from server to client Intention: a light-weight alternative to XML Incorporated into ISO Part of ECMAScript, RFC 4627 JSON: 5

6 M. C. Escher: (1898 – 1972) JSON: 6

7 Basic format of JSON: all data held in square brackets each record held in curly brackets field is made up of: field name in quotes value written appropriate to its data type name/value pairs delimited by commas JSON: 7 [ {name: value, name: value}, {name: value, name: value} ]

8 JSON formatting options: JSON: 8 http://www.json.org/ Ajax format for JSON employees = [ {"firstName":"John", "lastName":"Doe", "age":"18"}, {"firstName":"Peter", "lastName":"Jones", "age":"21"} ];

9 REST: each record in curly brackets all records in square brackets JSON: 9 http://www.json.org/ 0123 0 [0,0][0,1][0,2][0,3] 1 [1,0][1,1][1,2][1,3] 2 [2,0][2,1][2,2][2,3] array[2][1];//9 array[1][3];//7 array = [{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11}];

10 Each represents the same data; records Effectively a database table JSON: 10 students = [ {name:Ali, age:20, bolum:MBBF }, {name:Bahar, age:21, bolum:ITF } ]; Students NameAgeBolumGender Ali20MBBFErkek Bahar21ITFHanim students[1].age //21

11 An array of arrays or a database with 2 tables Company is DB, tables employees, managers JSON: 11 var company = {employees: [ { "firstName":"John", "lastName":"Doe", "age":"18"}, { "firstName":"Anna", "lastName":"Smith", "age":"20"}, { "firstName":"Peter", "lastName":"Jones", "age":"21"} ], managers: [ { "firstName":"Alice", "lastName":Williams", "age":"19"}, { "firstName":"Carla", "lastName":Walker", "age":"23"}, { "firstName":"Joe", "lastName":Evans", "age":"22"} ] } document.write(company.employees[2].firstName);//Peter document.write(company.managers[1].age);//23

12 Update table values also JSON: 12 var company = {employees: [ { "firstName":"John", "lastName":"Doe", "age":"18"}, { "firstName":"Anna", "lastName":"Smith", "age":"20"}, { "firstName":"Peter", "lastName":"Jones", "age":"21"} ], managers: [ { "firstName":Alice", "lastName":Williams", "age":"19"}, { "firstName":Carla", "lastName":Walker", "age":"23"}, { "firstName":Joe", "lastName":Evans", "age":"22"} ] } company.employees[2].firstName= Steve;

13 x-dimensional array saved as employees objname[i]fieldname: JSON: 13 employees = [ { "firstName":"John", "lastName":"Doe", "age":18}, { "firstName":"Anna", "lastName":"Smith", "age":20}, { "firstName":"Peter", "lastName":"Jones", "age":21} ]; document.write(employees[1].age);//20

14 JSON supports UTF-8; Notepad doesnt Must save UTF-8 files using UTF-8, not ANSI JSON: 14

15 Derived from JavaScript to represent objects: simple data structures associative arrays parsers available for many languages JSON: 15

16 JSON versus XML: JSON: 16 students= [ {name: Ali, age: 20, bolum: MBBF}, {name: Bahar, age: 21, bolum: ITF} ] Ali 20 MBBF Erkek Bahar 21 ITF Hanim

17 JSON: MIME type: application/json Extension:.json Basic form: uses name/value pairs JSON can be stored in either.json and.txt 17 {firstname: Canan} firstname = Canan; ¸ data.txt data.json

18 JSON is JavaScript XML with anorexia; faster to parse* Easier to write, lightweight, less verbose True data format, not a meta language JSON advantages: 18 Steve name: Steve,

19 True for both XML and JSON: language independent cross-platform self-describing human readable hierarchical (data in data, values describing values) JSON similarities: 19

20 JSON is JavaScript Requires use of eval function* Reserved JavaScript keywords cant be used as element names XML is more familiar, more like HTML XML more precise due to specific DTD XML has better support JSON disadvantages: 20

21 Data types of JSON: (just like JavaScript) number (JavaScript has no float and integer) string Boolean array object null JSON: 21

22 Both describe objects as strings Both are suitable for use in web services Both enjoy broad support, libraries, etc Tools exist to convert Data conversion can easily be done manually JSON versus XML: 22 Steve name: Steve,

23 JSON: 23 Ali a=indexOf("<") d=lastIndexOf("<") b=indexOf(">") c=lastIndexOf("<") "name"=substr(a+1,b-1) "Ali"=substring(b+1,c) " Convert XML to JSON: String.substr (start, # of characters); String.substring(start, finish);

24 JSON: 24 Ali a=indexOf("<") d=lastIndexOf("<") b=indexOf(">") c=lastIndexOf("<") "name"=substr(a+1,b-1) "Ali"=substring(b+1,c) document.write(name, value); Convert XML to JSON:

25 JSON: 25 Ali Zeybek 23 for (i=0; i { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.com/1466127/4/slides/slide_24.jpg", "name": "JSON: 25 Ali Zeybek 23 for (i=0; i

26 Lab: JSON Parser 26 7458 Elif Bardukoglu 5 Convert XML to name/value pairs Output: CustomerNumber: 3568, Assume data held in single string data 123 Ali Data= 7458 Elif Bardukoglu 5 ;

27 Lab: JSON Parser 27 data = " 7458 Elif Bardukoglu 5 "; var rawdata = data.split(" "); count = rawdata.length; for (i=0; i"); nametext = rawdata[i].substring(namestart + 1, nameend); valuestart = nameend; valueend = rawdata[i].lastIndexOf("<"); valuetext = rawdata[i].substring(valuestart + 1, valueend); document.write("\""+nametext+"\": \""+valuetext+"\""); if (i < count-1) document.write(", "); }

28 Break 28

29 Lab: JSON Parser 29 Convert JSON to XML: Ali 20 MBBF Bahar 21 ITF student=[ {"name":"Ali","age":"20","bolum":"MBBF"}, {"name":"Bahar","age":"21","bolum":"ITF"} ];

30 Lab: JSON Parser 30 student=[ {"name":"Ali","age":"20","bolum":"MBBF"}, {"name":"Bahar","age":"21","bolum":"ITF"} ]; Convert JSON to XML: Root element is students (not considered) Students is root element Text before = is like record name Rows are like records; holds field names, values

31 Lab: JSON Parser 31 Convert JSON to XML: (format is different) Assume no spaces in the data Ali 20 MBBF Bahar 21 ITF student=[{"name":"Ali","age":"20","bolum":"MBBF" },{"name":"Bahar","age":"21","bolum":"ITF"}];

32 Lab: JSON Parser 32 Convert JSON to XML: (format is different) student=[{"name":"Ali","age":"20","bolum":"MBBF" },{"name":"Bahar","age":"21","bolum":"ITF"}]; indexOf(\) lastIndexOf(\) replace(\,\, ) replace(\:\, ) name Ali age 20 bolum MBBF"}, {"name Bahar age 21 bolum ITF split( )

33 Quiz: 1. What is the address of the value 24? 33 121617 5812 3246 [2, 1]

34 Quiz: 2. Place this array in the table: 34 123 456 789 [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

35 Quiz: 3. What XML tag is most like a record? 35 data data data

36 Quiz: 4. From, the address of ? 5. Child nodes of 6. What is the root node? 36 [0].childNodes[0] 11 22 33 0

37 Quiz: 7. Children of ? 8. Value of [0].childNodes[1].childNodes[0].nodeValue 37 1 11 22 33 22

38 Quiz: 9. JSON array of 3 names: 38 friends = [ {name:Ali, name:Bahar, name:Canan} ];

39 Quiz: 10. What is the value of company.employees[1].age? 39 var company = {employees: [ { "firstName":"John", "lastName":"Doe", "age":18}, { "firstName":"Anna", "lastName":"Smith", "age":20}, { "firstName":"Peter", "lastName":"Jones", "age":21} ], managers: [ { "firstName":Alice", "lastName":Williams", "age":19}, { "firstName":Carla", "lastName":Walker", "age":23}, { "firstName":Joe", "lastName":Evans", "age":22} ] } 20

40 SE 370: Programming Web Services Week 12: JSON Copyright © Steven W. Johnson February 1, 2013

41 asd Today: 41

42 Labs: Assignment: Week 2: 42

43 asd Course textbook: 43

44 Break 44

45 Labs: Assignment: Week 2: 45

46 Deploy (rt. Click on project – Deploy) http://localhost:8080/HelloTest/webresources/generic Lab: Hello RESTful Webapps 46

47 REST: GET/POST/PUT/DELETE methods of HTTP Requires tomcat Made in maven RESTEasy NetBeans https://netbeans.org/kb/docs/websvc/intro-ws.html http://yiyujia.blogspot.com/2011/09/simple-tutorial-about-creating-jersey.html*** 47

48 Customers in table: Lab: Web Service using REST 48 @Stateless @Path("customerdb.customer") public class CustomerFacadeREST extends AbstractFacade { @PersistenceContext(unitName = "CustomerDBPU") private EntityManager em; public CustomerFacadeREST() { super(Customer.class); } @POST @Override @Consumes({"application/xml", "application/json"}) public void create(Customer entity) { super.create(entity); } @PUT @Override @Consumes({"application/xml", "application/json"}) public void edit(Customer entity) { super.edit(entity); } @DELETE @Path("{id}") public void remove(@PathParam("id") Integer id) { super.remove(super.find(id)); } @GET @Path("{id}") @Produces({"application/xml", "application/json"}) public Customer find(@PathParam("id") Integer id) { return super.find(id); } @GET @Override @Produces({"application/xml", "application/json"}) public List findAll() { return super.findAll(); } @GET @Path("{from}/{to}") @Produces({"application/xml", "application/json"}) public List findRange(@PathParam("from") Integer from, @PathParam("to") Integer to) { return super.findRange(new int[]{from, to}); } @GET @Path("count") @Produces("text/plain") public String countREST() { return String.valueOf(super.count()); } @Override protected EntityManager getEntityManager() { return em; } }

49 Customers in table: Lab: Web Service using REST 49 @Stateless @Path("customerdb.customer") public class CustomerFacadeREST extends AbstractFacade { @PersistenceContext(unitName = "CustomerDBPU") private EntityManager em; public CustomerFacadeREST() { super(Customer.class); } @POST @Override @Consumes({"application/xml", "application/json"}) public void create(Customer entity) { super.create(entity); } @PUT @Override @Consumes({"application/xml", "application/json"}) public void edit(Customer entity) { super.edit(entity); } @DELETE @Path("{id}") public void remove(@PathParam("id") Integer id) { super.remove(super.find(id)); } @GET @Path("{id}") @Produces({"application/xml", "application/json"}) public Customer find(@PathParam("id") Integer id) { return super.find(id); } @GET @Override @Produces({"application/xml", "application/json"}) public List findAll() { return super.findAll(); } @GET @Path("{from}/{to}") @Produces({"application/xml", "application/json"}) public List findRange(@PathParam("from") Integer from, @PathParam("to") Integer to) { return super.findRange(new int[]{from, to}); } @GET @Path("count") @Produces("text/plain") public String countREST() { return String.valueOf(super.count()); } @Override protected EntityManager getEntityManager() { return em; } }

50 Create record 14 as yourself Lab: Web Service using REST 50 111 E. Las Olivas Blvd Suite 51 Fort Lauderdale 100000 1 78 0.00 jumboeagle@example.com 305-555-0189 Jumbo Eagle Corp 305-555-0188 FL 6482 Sokak #33/1 Suite 51 Fort Lauderdale 100000 14 75 0.00 steve.johnson@gmail.com 305-555-0189 Jumbo Eagle Corp 305-555-0188 FL {"discountCode":"H","rate":16.00,"customerCollection":[{"customerId":36,"name":"Bob Hosting Corp.","addressline1":"65653 Lake Road","addressline2":"Suite 2323","city":"San Mateo","state":"CA","phone":"650-555-0160","fax":"650-555-0161","email":"www.bobhostcorp.example.com","creditLimit":65000,"discountCode":

51 Create the client application: File – New Project Lab: Web Service using REST 51

52 Uncheck Create Main Class – Finish Lab: Web Service using REST 52

53 Rt. Click Project – New – Entity Classes from Database Lab: Web Service using REST 53

54 Add package name - Finish Lab: Web Service using REST 54

55 Rt. Click on client project New – Other… - Web Services – RESTful Java Client Lab: Web Service using REST 55

56 Create the client application: File – New Project Lab: Web Service using REST 56

57 SE 370: Programming Web Services Week 12: JSON Copyright © Steven W. Johnson February 1, 2013

58 Use CRON to run the client page Asadmin in glassfish-3.1.2.2 – bin http://www.javascool.com/2010/04/15/ejb-timer-service/ Lab: CRONentry 58 rs.next(); int id=921; String customernumber = "ABCD"; String sku = rs.getString("sku"); int qtyordered = rs.getInt("maxstock") - rs.getInt("onhand");

59 Open Projects tab – File – New Project - Java Lab: CRONentry 59

60 Name: OrderWS (all server side is order) Main Class: DBConnect Lab: CRONentry 60

61 Lab: CRONentry 61 Gives a class DBConnect /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package orderws; /** * * @author Steve */ public class DBConnect { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here }

62 Lab: CRONentry 62 Connection to DB requires imports: unused import (will be used later) package orderws; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DBConnect { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here }

63 Set up the connection string: Error: unreported exception (add try/catch: coming) Lab: CRONentry 63 package orderws; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DBConnect { /** * @param args the command line arguments */ public static void main(String[] args) { String host = jdbc:derby://localhost:1527/order; String user = stevej String pass = izmir Connection con = DriverManager.getConnection(host, user, pass); }

64 Add try/catch framework: Lab: CRONentry 64 public static void main(String[] args) { try { String host = jdbc:derby://localhost:1527/order; String user = stevej String pass = izmir Connection con = DriverManager.getConnection(host, user, pass); } catch (SQLException err) { System.out.println(err.getMessage()); }

65 Add two imports to top These are used to create the query and recordset Lab: CRONentry 65 import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; //import java.sql.ResultSet;

66 Create INSERT query As written, works on single INSERT only Dummy data added to test format Lab: CRONentry 66 Statement stmt = con.createStatement(); int id = 12; String customernumber = "Server"; String sku = "428575 87412"; int qtyordered = 9; String SQL = "INSERT INTO orderentry VALUES ("+id+", '"+customernumber+"', '"+sku+"', "+qtyordered+")"; stmt.executeUpdate(SQL); System.out.println("Successful Execution");

67 http://www.vogella.com/articles/REST/article.html http://java.dzone.com/news/simple-restful-web-services http://java.dzone.com/articles/easy-way-expose-java-service http://firstinfinity.wordpress.com/modeling_rest_web_services/** http://rathinasaba.wordpress.com/2010/09/05/restful-web-service-sample-in-tomcat/ http://docs.oracle.com/cd/E21764_01/web.1111/e13734/rest.htm http://docs.oracle.com/cd/E19798-01/821-1841/giepu/index.html http://docs.oracle.com/javaee/6/tutorial/doc/gipzz.html Today: 67

68 Jersey Restlet JBoss RESTEasy Apache CXF Triaxrs Apache Wink eXo Implementations of REST 68

69 Create the client application: File – New Project Lab: Web Service using REST 69

70 Create the client application: File – New Project Lab: Web Service using REST 70

71 Create the client application: File – New Project Lab: Web Service using REST 71

72 Create the client application: File – New Project Lab: Web Service using REST 72

73 REST: REST architecture describes six constraints: client/server model; separation of concerns Stateless: no memory of prior communications Cacheable Layered system: may use intermediary servers Code on demand (optional) Uniform interface (wikipedia) https://en.wikipedia.org/wiki/Representational_state_transfer 73

74 DiscountCode.java Lab: Client side of REST 74

75 DiscountCode.java Lab: Client side of REST 75

76 http://www.oracle.com/technetwork/articles/javase/index-137171.html http://www.myeclipseide.com/documentation/quickstarts/webservices_rest/ http://rest.elkstein.org/ http://docs.oracle.com/javaee/6/tutorial/doc/giepu.html http://www.packtpub.com/restful-php-web-services/book http://davidwalsh.name/web-service-php-mysql-xml-json http://www.ibm.com/developerworks/opensource/tutorials/os-php-webservice/ http://publib.boulder.ibm.com/infocenter/wmbhelp/v7r0m0/index.jsp?topic=%2Fcom.ibm.etools.mft.samples.jsonrest.doc%2Fdoc%2Fintroduction.htm Today: 76

77 RESTful PHP Web ServiceRESTful PHP Web Services, http://www.packtpub.com/restful-php-web-services/bookhttp://www.packtpub.com/restful-php-web-services/book http://www.slideshare.net/jeremycod/consuming-restful-web-services-in-php Today: 77 http://www.mkyong.com/webservices/jax-rs/jersey-hello-world-example/

78 http://www.javaworld.com/javaworld/jw-01-2013/130124-web-services-are-dead-long-live-rest.htmlasd http://www.ibm.com/developerworks/web/library/wa-aj-tomcat/ http://drupal.org/node/1860564 http://code.google.com/p/staff/wiki/ExampleCalculatorService https://access.redhat.com/site/documentation/en-US/JBoss_Developer_Studio/4.0/html/JBoss_Web_Services_User_Guide/sample_web_service_wizards-sample_restful_web_service.html RESTEasy installed http://community.jaspersoft.com/wiki/getting-started-rest-web-service-api** http://www.9lessons.info/2012/05/create-restful-services-api-in-php.htmlhttp://www.9lessons.info/2012/05/create-restful-services-api-in-php.html PHP http://markroland.com/blog/restful-php-api/ http://phpmaster.com/writing-a-restful-web-service-with-slim/ http://www.xfront.com/REST-Web-Services.html Today: 78

79 asd Today: 79


Download ppt "SE 370: Programming Web Services Week 11: JSON & RESTful Copyright © Steven W. Johnson February 1, 2013."

Similar presentations


Ads by Google