14/Noviembre/2008
I T E S M
Programación Avanzada Web
Web services
A00385674
MCE
Guerrero
Cortazar
JuanCarlos
INTRODUCCIÓN
Un webService noesmásque una funciónenprotocoloHTTP.
Un WebService estácompuestopor:
 SOAP (Simple Object Ac...
 WSDL (Web Services Description Language).
o WSDL stands for Web Services Description Language
o WSDL is written in XML
o...
o UDDI (Universal Description, Discovery and Integration)
 UDDI is a directory service where businesses can register and
...
EJEMPLOS
SOAP:
REQUEST
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope" (ESTANDAR...
UDDI:
ArchivoService.disco
<?xml version="1.0" encoding="utf-8"?>
<discovery xmlns:xsi="http://www.w3.org/2001/XMLSchema-i...
DESARROLLO
SOAP permite dar responses como las que regresa un web server a un servicio (200, 401,
500, 503, etc.), pero en...
¿Quiénes manejan WebServices?
MicroSoft .net framework en IIS
El IDE de VS es completamente amigable para el desarrollo de...
Ejemplode código Visual Basic .net2005
Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocol...
Apache
Actualmente soporta implementaciónes para C++ y Java.
La comunidad ha desarrollado varios web services, entre los q...
Ejemplo de la implementación en Server:
<service name="Calculator" provider="CPP:RPC " description="Calculator Web Service...
Ejemplo de un Handler:
<service name="Calculator" provider="CPP:RPC" description="Simple Calculator Axis
C++ Service">
<re...
Ruby on Rails
Modelo
Data Source (S3) -> Model -> Controller -> View (RHTML) -> HTML page
Ejemplo
# bucket_prefix:use this...
Consumiendoun.net Service enRoR
class SomeController < ApplicationController
...
web_client_api :my_service, :soap,
"http:...
Conclusión
Web Services permiten a aplicaciones web interactuar entre sí sin importar el OS o
WebServer en que estén corri...
Fuentes
consultadas al 14 de Noviembre de 2008
Apache <webServices />
http://ws.apache.org
W3C
http://www.w3c.org
W3school...
Upcoming SlideShare
Loading in...5
×

WebServices/webServices.docx (1/14/2009 7:07 - LaSalleChihuahua ...

1,968

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,968
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
82
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "WebServices/webServices.docx (1/14/2009 7:07 - LaSalleChihuahua ..."

  1. 1. 14/Noviembre/2008 I T E S M Programación Avanzada Web Web services A00385674 MCE Guerrero Cortazar JuanCarlos
  2. 2. INTRODUCCIÓN Un webService noesmásque una funciónenprotocoloHTTP. Un WebService estácompuestopor:  SOAP (Simple Object Access Protocol) o SOAP stands for Simple Object Access Protocol o SOAP is a communication protocol o SOAP is for communication between applications o SOAP is a format for sending messages o SOAP communicates via Internet o SOAP is platform independent o SOAP is language independent o SOAP is based on XML o SOAP is simple and extensible o SOAP allows you to get around firewalls o SOAP is a W3C recommendation o Sintaxis: <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Header> ... ... </soap:Header> <soap:Body> ... ... <soap:Fault> ... ... </soap:Fault> </soap:Body> </soap:Envelope>
  3. 3.  WSDL (Web Services Description Language). o WSDL stands for Web Services Description Language o WSDL is written in XML o WSDL is an XML document o WSDL is used to describe Web services o WSDL is also used to locate Web services o WSDL is a W3C recommendation o Sample: <definitions> <types> definition of types........ </types> <message> definition of a message.... </message> <portType> definition of a port....... </portType> <binding> definition of a binding.... </binding> </definitions>
  4. 4. o UDDI (Universal Description, Discovery and Integration)  UDDI is a directory service where businesses can register and search for Web services.  UDDI stands for Universal Description, Discovery and Integration  UDDI is a directory for storing information about web services  UDDI is a directory of web service interfaces described by WSDL  UDDI communicates via SOAP  UDDI is built into the Microsoft .NET platform  Sintaxis: <wsdl:definitionsname="nmtoken"? targetNamespace="uri"> <import namespace="uri" location="uri"/> * <wsdl:documentation .... /> ? <wsdl:types> ? <wsdl:documentation .... /> ? <xsd:schema .... /> * </wsdl:types> <wsdl:message name="ncname"> * <wsdl:documentation .... /> ? <part name="ncname" element="qname"? type="qname"?/> * </wsdl:message> <wsdl:portType name="ncname"> * <wsdl:documentation .... /> ? <wsdl:operation name="ncname"> * <wsdl:documentation .... /> ? <wsdl:input message="qname"> ? <wsdl:documentation .... /> ? </wsdl:input> <wsdl:output message="qname"> ? <wsdl:documentation .... /> ? </wsdl:output> <wsdl:fault name="ncname" message="qname">* <wsdl:documentation .... /> ? </wsdl:fault> </wsdl:operation> </wsdl:portType> <wsdl:serviceType name="ncname"> * <wsdl:portType name="qname"/> + </wsdl:serviceType> <wsdl:binding name="ncname" type="qname"> * <wsdl:documentation .... /> ? <-- binding details --> * <wsdl:operation name="ncname"> * <wsdl:documentation .... /> ? <-- binding details --> * <wsdl:input> ? <wsdl:documentation .... /> ? <-- binding details --> </wsdl:input> <wsdl:output> ? <wsdl:documentation .... /> ? <-- binding details --> * </wsdl:output> <wsdl:fault name="ncname"> * <wsdl:documentation .... /> ? <-- binding details --> * </wsdl:fault> </wsdl:operation> </wsdl:binding> <wsdl:service name="ncname" serviceType="qname"> * <wsdl:documentation .... /> ? <wsdl:port name="ncname" binding="qname"> * <wsdl:documentation .... /> ? <-- address details --> </wsdl:port> </wsdl:service> </wsdl:definitions>
  5. 5. EJEMPLOS SOAP: REQUEST <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" (ESTANDAR W3) soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Body xmlns:m="http://-URL-/SOAPapp"> <m:GetData> <m:DataName>IBM</m:DataName> </m:GetData> </soap:Body> </soap:Envelope> RESPONSE <?xml version="1.0"?> <soap:Envelope xmlns:soap=http://www.w3.org/2001/12/soap-envelope (ESTANDAR W3) soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Body xmlns:m="http://-URL-/SOAPapp"> <m:GetDataResponse> <m:Data>34.5</m:Data> </m:GetDataResponse> </soap:Body> </soap:Envelope> WDSL ligado a SOAP: <message name="getTermRequest"> <part name="term" type="xs:string"/> </message> <message name="getTermResponse"> <part name="value" type="xs:string"/> </message> <portType name="glossaryTerms"> <operation name="getTerm"> <input message="getTermRequest"/> <output message="getTermResponse"/> </operation> </portType> <binding type="glossaryTerms" name="b1"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> <operation> <soap:operation soapAction="http://example.com/getTerm"/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> </binding>
  6. 6. UDDI: ArchivoService.disco <?xml version="1.0" encoding="utf-8"?> <discovery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/disco/"> <contractRef ref="http:// -URL-/SiteWebService/Service.asmx?wsdl" docRef="http://localhost/SiteWebService/Service.asmx" xmlns="http://schemas.xmlsoap.org/disco/scl/" /> <soap address="http:// -URL-/SiteWebService/Service.asmx" xmlns:q1="http://tempuri.org/" binding="q1:ServiceSoap" xmlns="http://schemas.xmlsoap.org/disco/soap/" /> <soap address="http://-URL-/SiteWebService/Service.asmx" xmlns:q2="http://tempuri.org/" binding="q2:ServiceSoap12" xmlns="http://schemas.xmlsoap.org/disco/soap/" /> </discovery> ArchivoService.discomap <?xml version="1.0" encoding="utf-8"?> <DiscoveryClientResultsFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Results> <DiscoveryClientResult referenceType="System.Web.Services.Discovery.DiscoveryDocumentRefer ence" url="http://-URL-/SiteWebService/Service.asmx?disco" filename="Service.disco" /> <DiscoveryClientResult referenceType="System.Web.Services.Discovery.ContractReference" url="http://-URL-/SiteWebService/Service.asmx?wsdl" filename="Service.wsdl" /> </Results> </DiscoveryClientResultsFile>
  7. 7. DESARROLLO SOAP permite dar responses como las que regresa un web server a un servicio (200, 401, 500, 503, etc.), pero entre aplicaciones para poder pasar información entre ellas sin necesidad de implementaciones robustas o dependiendo de la tecnología plenamente. WSDL: Le da forma a SOAP para ser empleado como WebService (XSD: Schema Definition) UDDI: Servicio de registro y búsqueda de otros webServices para las empresas ¿Que tan poderoso llegará a ser el webService como recurso? Tanto como vaya creciendo la funcionalidad de SOAP, sobre todo en seguridad.
  8. 8. ¿Quiénes manejan WebServices? MicroSoft .net framework en IIS El IDE de VS es completamente amigable para el desarrollo de webServices. Hace que un webService en realidad suene atractivo y no aterrador, como con otras tecnologías e IDEs, ya que el desarrollo de las aplicacionescompletamenteapie:definicióndelSOAP,definicióndel WSDL, UDDI aunque este último es opcional; y todo esto y siquiera hemos comenzado con la función en sí!!! El IDE de VS solo genera el archivo que abstractiza la implementación del wervicio (archivos .asmx) ya que este solo tiene una referenciaal archivo que contiene el código que se emplea en cada una de las funciones: http://URL/aplicación/servicio.asmx/método Así mismo, a través de los dataSets, la abstractización de los datos en repositorios es sumamente sencilla.Básicamentesolose debe preocuparunode laaplicaciónensí que queremos publicar. De igual forma,a lahora de desarrollarel cliente,solose tiene que apuntalar a el servicio que se desea consumir, y el IDE genera automáticamente todo el WSDL e incluso los UDDI necesarios para garantizar la buena comunicación con este servicio. Finalmenteparaemplearel servicio, solo es necesario usar el servicio.método como una clase más dentro de la aplicación.
  9. 9. Ejemplode código Visual Basic .net2005 Imports System.Web Imports System.Web.Services Imports System.Web.Services.Protocols Imports DataSetProducto Imports DataSetProductoTableAdapters <WebService(Namespace:="http://tempuri.org/")> _ <WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _ <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ Public ClassService Inherits System.Web.Services.WebService Dim TAProductos As New ProductosTableAdapter Dim DTProductos As ProductosDataTable Dim resultado As String <WebMethod()> Public Function ConsultaProducto(ByVal IdProducto As System.Int16) As String DTProductos = TAProductos.GetProducto(IdProducto) If DTProductos.Rows.Count > 0 Then resultado= DTProductos.Rows(0).Item("Descripcion").ToString Return resultado End If Return "No existe informacion delProducto" End Function
  10. 10. Apache Actualmente soporta implementaciónes para C++ y Java. La comunidad ha desarrollado varios web services, entre los que destacan:  Axis (1.X) - an implementation of the Simple Object Access Protocol (SOAP).  Axis2 - a redesign of Axis (1.X) supporting SOAP 1.2/SOAP1.2/REST/and more.  WS-Commons - collection of web service related, reusable components.  JaxMe - an implementation of JAXB, the specification for Java/XML binding.  jUDDI - an implementation of the Universal Description, Discovery, and Integration (UDDI) specification.  Kandula - implements WS-Coordination, WS-AtomicTransaction and WS- BusinessActivity protocols based on Apache Axis and Axis2.  Muse - an implementation of the WS-ResourceFramework (WSRF), WS- BaseNotification (WSN), and WS-DistributedManagement (WSDM) specifications.  Sandesha - WS-ReliableMessaging implementations for Axis and Axis2  Scout - an implementation of the JSR 93 (JAXR).  Synapse - a robust, lightweight implementation of a highly scalable and distributed service mediation framework based on Web services specifications.  Tuscany - a robust infrastructure that simplifies the development of SOA-based systems, including: Service Component Architecture (SCA), Service Data Object (SDO), and Data Access Service (DAS).  Woden - a Java class library for reading, manipulating, creating and writing WSDL documents.  WSIF - a simple Java API for invoking Web services, no matter how or where the services are provided.  WSS4J - an implementation of the OASIS Web Services Security (WS-Security) from OASIS Web Services Security TC.  XML-RPC - a Java implementation of XML-RPC, a popular protocol that uses XML over HTTP to implement remote procedure calls.
  11. 11. Ejemplo de la implementación en Server: <service name="Calculator" provider="CPP:RPC " description="Calculator Web Service"> <parameter name="className" value="<Apache_Folder>/Axis/webservices/libcalculator.so"/> </service> Implementación en el Cliente: #include "Calculator.h" #include<stdio.h> int main() { Calculator c; int intOut; c.add(20, 40, intOut); printf("result is = %dn", intOut); return 0; }
  12. 12. Ejemplo de un Handler: <service name="Calculator" provider="CPP:RPC" description="Simple Calculator Axis C++ Service"> <requestFlow name="CalculatorHandlers"> <handler name="ESHHandler" type="<Axis installation directory>/handlers/custom/echoStringHeaderHandler/libeshhandler.so"> </handler> </requestFlow> <responseFlow name="CalculatorHandlers"> <handler name="ESHHandler" type="<Axis installation directory>/handlers/custom/echoStringHeaderHandler/libeshhandler.so"> </handler> </responseFlow> <parameter name="allowedMethods" value="add sub mul div"/> <parameter name="className" value="<Axis installation directory>/webservices/libcalculator.so" /> </service> Implementación de un Handler: if (pIHeaderBlock != NULL) { const BasicNode* pBasicNode= pIHeaderBlock->getFirstChild(); const AxisChar* pachHeaderValue; if (pBasicNode != NULL) { if((pBasicNode->getNodeType()) == CHARACTER_NODE) { pachHeaderValue= pBasicNode->getValue(); } else { pachHeaderValue = "This was not the expected value Ros"; } } else { pachHeaderValue = "pBascNode is NULL"; } AxisChar* pachTmpValue = (AxisChar*) malloc(strlen(pachHeaderValue) + 4); strcpy(pachTmpValue, pachHeaderValue); pachTemp = "EchoStringHeaderHandlerPr1.id"; pIMsg->setProperty(pachTemp, pachTmpValue); free(pachTmpValue); } else { //do some thing //AxisChar* pachTmpValue = "Default values since no reqeust SOAP header"; //pachTemp = "EchoStringHeaderHandlerPr1.id"; //pIMsg->setProperty(pachTemp, pachTmpValue); //free(pachTmpValue); }
  13. 13. Ruby on Rails Modelo Data Source (S3) -> Model -> Controller -> View (RHTML) -> HTML page Ejemplo # bucket_prefix:use thisas the prefix for buckets; # will be set frombucket_prefix inaws_keys.yaml if defined;otherwise defaults to aws access key def self.init(config_file, bucket_prefix=nil) config = File.open(@config_file) { |f|YAML::load(f) } @aws_access_key= config['aws_access_key'] @aws_secret_access_key= config['aws_secret_access_key'] @ssl = config['use_ssl']|| false if @ssl @logger.debug("SSL is enabled") else @logger.debug("SSL is disabled") end @bucket_prefix = bucket_prefix || config['bucket_prefix'] || @aws_access_key @conn = S3::AWSAuthConnection.new(@aws_access_key, @aws_secret_access_key, @ssl) end ImplementaciónrHTML <h2>Your S3 accounthas <%=@buckets.size %>buckets, viewing <%=@entries.size%></h2> <% if@entries.size >0 %> <div class="left-aligned"> <p align="center"> <% for bucket in @entries %> <% @count =@count+1 %> <% if(@count % 100) ==0 %> <br><br> <% end %> <span id="bucket_count">[<%=@count%>]</span> <span id="bucket"><%=link_tobucket.name, :action =>'list_bucket', :bucket_name=>bucket.name, :bucket_page =>@bucket_page %></span> <span id="ops"> [<%= link_to 'Public', :action =>'make_bucket_public', :bucket_name =>bucket.name %>| <%= link_to 'Private', :action=>'make_bucket_private', :bucket_name=>bucket.name %>| <%= link_to 'DELETE', {:action =>'delete_bucket', :bucket_name=>bucket.name }, :confirm => "Are you sure you wantto delete'"+bucket.name+"'?nAll items contained init willbedeleted!"%>] </span> <br > <% end %> </p> </div> <%=link_to '<<First', {:page =>1 }%> <%=link_to '<Prev', {:page =>@entry_pages.current.previous }if@entry_pages.current.previous %> <%=link_to 'Next >', {:page =>@entry_pages.current.next }if@entry_pages.current.next%> <%=link_to 'Last>>', {:page =>@entry_pages.length}%> <% else %> <p> <b>You have no Buckets</b> </p> <% end %>
  14. 14. Consumiendoun.net Service enRoR class SomeController < ApplicationController ... web_client_api :my_service, :soap, "http://localhost:8080/CrystalReportsService.asmx", :namespace=>"http://www.mycompany.com", :driver_options=>{:default_encodingstyle => SOAP::EncodingStyle::ASPDotNetHandler::Namespace } ...
  15. 15. Conclusión Web Services permiten a aplicaciones web interactuar entre sí sin importar el OS o WebServer en que estén corriendo. Su verdadera implementación se encuentra cuando, por ejemplo, un server IIS no puede acceder a una base de datos Oracle en Linux, y un PHP a un SQL ServerenWindows.Simplemente se crean las reglas del juego (SOAP+WSDL) y se hacen los back ends en cada respectivo lado. No podemoscompararcual esmejor,ya que precisamente suimplementaciónfuerte esel poder interconectar webServers de distintas tecnologías y actuar como una gran aplicación. Todavía está en su temprana etapa, pero esperamos ver como crece hacia la centralización de la era de la informática automatizada.
  16. 16. Fuentes consultadas al 14 de Noviembre de 2008 Apache <webServices /> http://ws.apache.org W3C http://www.w3c.org W3schools http://www.w3schools.com RoR http://developer.amazonwebservices.com/connect/entry.jspa?externalID=608

×