{"id":313,"date":"2014-02-10T21:34:29","date_gmt":"2014-02-10T20:34:29","guid":{"rendered":"http:\/\/louis.hatier.me\/blog\/?p=313"},"modified":"2021-03-05T22:22:31","modified_gmt":"2021-03-05T21:22:31","slug":"soap-zend-framework","status":"publish","type":"post","link":"https:\/\/louis.hatier.me\/blog\/soap-zend-framework\/","title":{"rendered":"SOAP avec Zend Framework"},"content":{"rendered":"<p><a title=\"\" href=\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2014\/02\/logo-zend-framework.jpg\" data-rel=\"lightbox-gallery-WwauVrCX\" data-rl_title=\"\" data-rl_caption=\"\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-315 alignleft\" title=\"Logo Zend Framework\" src=\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2014\/02\/logo-zend-framework.jpg\" alt=\"Logo Zend Framework\" width=\"237\" height=\"55\"><\/a><\/p>\n<p dir=\"ltr\">Simple Object Access Protocol (SOAP) est un protocole qui permet d&rsquo;\u00e9changer des messages \u00e0 distance.<\/p>\n<p>&nbsp;<\/p>\n<p dir=\"ltr\">Ce protocole peut \u00eatre utilis\u00e9 pour cr\u00e9er ou appeler des <a title=\"Service Web\" href=\"http:\/\/fr.wikipedia.org\/wiki\/Service_Web#Les_Services_Web_WS\" target=\"_blank\" rel=\"noopener\">Web Services<\/a> via HTTP.<\/p>\n<p dir=\"ltr\">Sa structure est d\u00e9crite au format XML.<\/p>\n<p><!--more--><\/p>\n<h2>Exemple d&rsquo;utilisation de SOAP avec Zend Framework<\/h2>\n<p>Voici un exemple simple d&rsquo;utilisation de SOAP, avec la partie c\u00f4t\u00e9 serveur, et c\u00f4t\u00e9 client.<\/p>\n<p>&nbsp;<\/p>\n<h3>C\u00f4t\u00e9 serveur<\/h3>\n<p>Tout d&rsquo;abord, installer si ce n&rsquo;est pas d\u00e9j\u00e0 le cas, le paquet php-soap :&nbsp;<code>apt-get install php-soap<\/code>.<\/p>\n<p>Ensuite, dans un projet Zend, cr\u00e9er un <em>controller<\/em> <code>SoapController<\/code>, avec une fonction&nbsp;<code>wsdlAction<\/code>&nbsp;qui va g\u00e9n\u00e9rer le fichier WSDL (xml).<\/p>\n<p>Le fichier <a title=\"WSDL\" href=\"http:\/\/fr.wikipedia.org\/wiki\/Web_Services_Description_Language\" target=\"_blank\" rel=\"noopener\">WSDL<\/a> sert \u00e0 d\u00e9crire notre service web, on lui pr\u00e9cise donc la classe qu&rsquo;il devra d\u00e9crire.<\/p>\n<pre><code class=\"php\">class SoapController extends Zend_Controller_Action\n{\n    public function init()\n    {\n        Zend_Layout::getMvcInstance()-&gt;disableLayout();\n        Zend_Controller_Front::getInstance()-&gt;setParam('noViewRenderer', true);\n    }\n\n    public function indexAction()\n    {\n        $soapServer = new Zend_Soap_Server(\n            'http:\/\/www.mon-serveur.fr\/soap\/wsdl\/',\n            array(\n                'soap_version' =&gt; SOAP_1_1,\n                'encoding'     =&gt; 'UTF-8'\n            )\n        );\n        $soapServer-&gt;setPersistence(SOAP_PERSISTENCE_SESSION);\n        $soapServer-&gt;setClass('Soap_User');\n        $soapServer-&gt;handle();\n    }\n\n    public function wsdlAction()\n    {\n        $wsdl = new Zend_Soap_AutoDiscover();\n        $wsdl-&gt;setClass('Soap_User');\n        $wsdl-&gt;setUri('http:\/\/www.mon-serveur.fr\/soap\/');\n        $wsdl-&gt;handle();\n    }\n}\n<\/code><\/pre>\n<p>Maintenant il faut \u00e9crire notre classe <code>Soap_User<\/code> en pr\u00e9cisant bien les param\u00e8tres en entr\u00e9e et la valeur en sortie.<\/p>\n<pre><code class=\"php\">class Soap_User\n{\n    \/**\n     * Retourne un utilisateur\n     * \n     * @param integer $idUser\n     * @return array\n     *\/\n    public function getUser($idUser)\n    {\n        $tableUser = new Table_User();\n\n        return $tableUser-&gt;fetchRow(\n            $tableUser-&gt;select()-&gt;where('idUser = ?', $idUser)\n        )-&gt;toArray();\n    }\n}\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<h3>C\u00f4t\u00e9 client<\/h3>\n<p>On commence par pr\u00e9ciser qu&rsquo;on ne veut pas utiliser le cache WSDL (\u00e0 faire pendant la p\u00e9riode de test).<\/p>\n<pre><code class=\"php\">ini_set('soap.wsdl_cache_enabled', '0');\n<\/code><\/pre>\n<p>Ensuite, dans un <em>controller<\/em> quelconque, on va utiliser le service web cr\u00e9er plus haut.<\/p>\n<p>On cr\u00e9er un objet&nbsp;<code>Zend_Soap_Client<\/code> en lui pr\u00e9cisant l&rsquo;adresse du fichier WSDL, et un tableau d&rsquo;options.<\/p>\n<pre><code class=\"php\">$optionsSoap = array(\n    'soap_version' =&gt; SOAP_1_1,\n    'encoding'     =&gt; 'UTF-8',\n    'compression'  =&gt; SOAP_COMPRESSION_ACCEPT\n);\n$soapClient = new Zend_Soap_Client('http:\/\/www.mon-serveur.fr\/soap\/wsdl\/', $optionsSoap);\n<\/code><\/pre>\n<p>Maintenant, on peut facilement faire appel \u00e0 la fonction qui permet de r\u00e9cup\u00e9rer un utilisateur :<\/p>\n<pre><code class=\"php\">try {\n    $user = $soapClient-&gt;getUser(3);\n} catch (Soap_Fault $e) {\n    var_dump($e);\n}\n<\/code><\/pre>\n<p>Si vous ne voulez pas t\u00e9l\u00e9charger le fichier xml \u00e0 chaque appel, vous pouvez r\u00e9activer le cache et \u00e9galement pr\u00e9ciser un dossier et une dur\u00e9e de vie :<\/p>\n<pre><code class=\"php\">ini_set('soap.wsdl_cache_enabled', '1');\nini_set('soap.wsdl_cache_dir', '\/tmp');\nini_set('soap.wsdl_cache_ttl', 86400);<\/code><\/pre>\n<p>&nbsp;<\/p>\n<h2>SoapUI<\/h2>\n<p>Pour tester votre WS, vous pouvez utiliser <a title=\"SoapUI\" href=\"http:\/\/www.soapui.org\/\" target=\"_blank\" rel=\"noopener\">SoapUI<\/a>.<br \/>\nLe logiciel permet de tester plusieurs services web, il suffit de pr\u00e9ciser l\u2019adresse d&rsquo;un fichier WSDL, et de rentrer des donn\u00e9es \u00e0 la main (dans notre cas un identifiant utilisateur), le r\u00e9sultat vous sera affich\u00e9.<\/p>\n<div style=\"padding-bottom:20px; padding-top:10px;\" class=\"hupso-share-buttons\"><!-- Hupso Share Buttons - https:\/\/www.hupso.com\/share\/ --><a class=\"hupso_counters\" href=\"https:\/\/www.hupso.com\/share\/\"><img decoding=\"async\" src=\"https:\/\/static.hupso.com\/share\/buttons\/dot.png\" style=\"border:0px; padding-top:2px; float:left;\" alt=\"Share Button\"\/><\/a><script type=\"text\/javascript\">var hupso_services_c=new Array(\"twitter\",\"facebook_like\",\"pinterest\",\"email\",\"linkedin\");var hupso_counters_lang = \"en_US\";var hupso_image_folder_url = \"\";var hupso_url_c=\"\";var hupso_title_c=\"SOAP%20avec%20Zend%20Framework\";<\/script><script type=\"text\/javascript\" src=\"https:\/\/static.hupso.com\/share\/js\/counters.js\"><\/script><!-- Hupso Share Buttons --><\/div>","protected":false},"excerpt":{"rendered":"<p>Simple Object Access Protocol (SOAP) est un protocole qui permet d&rsquo;\u00e9changer des messages \u00e0 distance. &nbsp; Ce protocole peut \u00eatre utilis\u00e9 pour cr\u00e9er ou appeler des Web Services via HTTP. Sa structure est d\u00e9crite au format XML.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[92,2],"tags":[57,28,46,17],"class_list":["post-313","post","type-post","status-publish","format-standard","hentry","category-api","category-php","tag-php","tag-soap","tag-soapui","tag-zend"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>SOAP avec Zend Framework - Melting Poutre<\/title>\n<meta name=\"description\" content=\"Utilisation de Web Service SOAP avec Zend Framework\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/louis.hatier.me\/blog\/soap-zend-framework\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SOAP avec Zend Framework - Melting Poutre\" \/>\n<meta property=\"og:description\" content=\"Utilisation de Web Service SOAP avec Zend Framework\" \/>\n<meta property=\"og:url\" content=\"https:\/\/louis.hatier.me\/blog\/soap-zend-framework\/\" \/>\n<meta property=\"og:site_name\" content=\"Melting Poutre\" \/>\n<meta property=\"article:published_time\" content=\"2014-02-10T20:34:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-03-05T21:22:31+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2014\/02\/logo-zend-framework.jpg\" \/>\n<meta name=\"author\" content=\"Louis Hatier\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Louis Hatier\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/louis.hatier.me\/blog\/soap-zend-framework\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/soap-zend-framework\/\"},\"author\":{\"name\":\"Louis Hatier\",\"@id\":\"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11\"},\"headline\":\"SOAP avec Zend Framework\",\"datePublished\":\"2014-02-10T20:34:29+00:00\",\"dateModified\":\"2021-03-05T21:22:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/soap-zend-framework\/\"},\"wordCount\":302,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11\"},\"image\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/soap-zend-framework\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2014\/02\/logo-zend-framework.jpg\",\"keywords\":[\"PHP\",\"SOAP\",\"SoapUI\",\"Zend\"],\"articleSection\":[\"API\",\"PHP\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/louis.hatier.me\/blog\/soap-zend-framework\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/louis.hatier.me\/blog\/soap-zend-framework\/\",\"url\":\"https:\/\/louis.hatier.me\/blog\/soap-zend-framework\/\",\"name\":\"SOAP avec Zend Framework - Melting Poutre\",\"isPartOf\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/soap-zend-framework\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/soap-zend-framework\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2014\/02\/logo-zend-framework.jpg\",\"datePublished\":\"2014-02-10T20:34:29+00:00\",\"dateModified\":\"2021-03-05T21:22:31+00:00\",\"description\":\"Utilisation de Web Service SOAP avec Zend Framework\",\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/louis.hatier.me\/blog\/soap-zend-framework\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/louis.hatier.me\/blog\/soap-zend-framework\/#primaryimage\",\"url\":\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2014\/02\/logo-zend-framework.jpg\",\"contentUrl\":\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2014\/02\/logo-zend-framework.jpg\"},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/louis.hatier.me\/blog\/#website\",\"url\":\"https:\/\/louis.hatier.me\/blog\/\",\"name\":\"Melting Poutre\",\"description\":\"Du web et d&#039;autres choses\",\"publisher\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/louis.hatier.me\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11\",\"name\":\"Louis Hatier\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/cd8d107ede5a4ec340326655e74a00ca62b02e41a02442f961c36f085aa89942?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/cd8d107ede5a4ec340326655e74a00ca62b02e41a02442f961c36f085aa89942?s=96&d=mm&r=g\",\"caption\":\"Louis Hatier\"},\"logo\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/louis.hatier.me\",\"https:\/\/www.linkedin.com\/in\/louishatier\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"SOAP avec Zend Framework - Melting Poutre","description":"Utilisation de Web Service SOAP avec Zend Framework","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/louis.hatier.me\/blog\/soap-zend-framework\/","og_locale":"fr_FR","og_type":"article","og_title":"SOAP avec Zend Framework - Melting Poutre","og_description":"Utilisation de Web Service SOAP avec Zend Framework","og_url":"https:\/\/louis.hatier.me\/blog\/soap-zend-framework\/","og_site_name":"Melting Poutre","article_published_time":"2014-02-10T20:34:29+00:00","article_modified_time":"2021-03-05T21:22:31+00:00","og_image":[{"url":"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2014\/02\/logo-zend-framework.jpg","type":"","width":"","height":""}],"author":"Louis Hatier","twitter_misc":{"\u00c9crit par":"Louis Hatier","Dur\u00e9e de lecture estim\u00e9e":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/louis.hatier.me\/blog\/soap-zend-framework\/#article","isPartOf":{"@id":"https:\/\/louis.hatier.me\/blog\/soap-zend-framework\/"},"author":{"name":"Louis Hatier","@id":"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11"},"headline":"SOAP avec Zend Framework","datePublished":"2014-02-10T20:34:29+00:00","dateModified":"2021-03-05T21:22:31+00:00","mainEntityOfPage":{"@id":"https:\/\/louis.hatier.me\/blog\/soap-zend-framework\/"},"wordCount":302,"commentCount":0,"publisher":{"@id":"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11"},"image":{"@id":"https:\/\/louis.hatier.me\/blog\/soap-zend-framework\/#primaryimage"},"thumbnailUrl":"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2014\/02\/logo-zend-framework.jpg","keywords":["PHP","SOAP","SoapUI","Zend"],"articleSection":["API","PHP"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/louis.hatier.me\/blog\/soap-zend-framework\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/louis.hatier.me\/blog\/soap-zend-framework\/","url":"https:\/\/louis.hatier.me\/blog\/soap-zend-framework\/","name":"SOAP avec Zend Framework - Melting Poutre","isPartOf":{"@id":"https:\/\/louis.hatier.me\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/louis.hatier.me\/blog\/soap-zend-framework\/#primaryimage"},"image":{"@id":"https:\/\/louis.hatier.me\/blog\/soap-zend-framework\/#primaryimage"},"thumbnailUrl":"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2014\/02\/logo-zend-framework.jpg","datePublished":"2014-02-10T20:34:29+00:00","dateModified":"2021-03-05T21:22:31+00:00","description":"Utilisation de Web Service SOAP avec Zend Framework","inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/louis.hatier.me\/blog\/soap-zend-framework\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/louis.hatier.me\/blog\/soap-zend-framework\/#primaryimage","url":"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2014\/02\/logo-zend-framework.jpg","contentUrl":"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2014\/02\/logo-zend-framework.jpg"},{"@type":"WebSite","@id":"https:\/\/louis.hatier.me\/blog\/#website","url":"https:\/\/louis.hatier.me\/blog\/","name":"Melting Poutre","description":"Du web et d&#039;autres choses","publisher":{"@id":"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/louis.hatier.me\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":["Person","Organization"],"@id":"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11","name":"Louis Hatier","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/cd8d107ede5a4ec340326655e74a00ca62b02e41a02442f961c36f085aa89942?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/cd8d107ede5a4ec340326655e74a00ca62b02e41a02442f961c36f085aa89942?s=96&d=mm&r=g","caption":"Louis Hatier"},"logo":{"@id":"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/louis.hatier.me","https:\/\/www.linkedin.com\/in\/louishatier\/"]}]}},"_links":{"self":[{"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/posts\/313","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/comments?post=313"}],"version-history":[{"count":7,"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/posts\/313\/revisions"}],"predecessor-version":[{"id":880,"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/posts\/313\/revisions\/880"}],"wp:attachment":[{"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/media?parent=313"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/categories?post=313"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/tags?post=313"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}