Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> PHP & SOAP
jacek21
post
Post #1





Grupa: Zarejestrowani
Postów: 52
Pomógł: 2
Dołączył: 13.06.2012

Ostrzeżenie: (0%)
-----


Witam,

Jestem aktualnie na etapie czyania pewnej książki i dotarłem do typów usług sieciowych. No i pojawił się problem nie dokońca chyba rozumiem zagadnienie SOAP.
Jeśli byłby ktoś kto miał z tym doczynienia byłbym wdzięczny, gdyby odpowiedział mi na poniższe pytania:

Jak korzystać z SOAP(mile widziane przykłądy)?

Do czego SOAP może być przydatne(tylko nie na przykładzie walut(takie moje fanaberie (IMG:style_emoticons/default/biggrin.gif) ))

Może małe porady jak to ugryść od strony PHP, jakiś tuturial, kurs cokolwiek(szukałem, ale nie znalazłem nic co byłoby napisane w stylu soapClient - służy do tego tamtego, przykład, przeglądałem manuala, lecz jeszcze mój angielski lekko kuleje a poza tym opisy są tak 'obszerne', że dla człowieka, który nie wiem na temat SOAP prawie nic niewiele pomagają)?

mile widziane dodatkowe informacje ^^
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Puszy
post
Post #2





Grupa: Zarejestrowani
Postów: 279
Pomógł: 42
Dołączył: 10.10.2011

Ostrzeżenie: (0%)
-----


Od ponad roku pracuję z SOAP'em na PHP, konkretnie tworzę połączenie 3 niezależnych WMSów korzystając właśnie z Web Service'ów. Na początku byłem bardzo zadowolony z takiego rozwiązania. Nie trzeba znać bazy danych, niemal wszystko można robić w locie korzystając jedynie z niewielkiej bazy z tabelami pomocniczymi. Po około pół roku gdy zaczęto wymagać ciut więcej sprawy się skomplikowały. Oczywiście wszystko zależy kto udostępnia owy WS i jak nim zarządza. Jak wspomniałem wcześniej korzystam z 3 Web Service'ów, i żaden nie pozwala mi pobrać danych "różnych od". Dla przykładu: gdy chcę pobrać listę zamówień gdzie nazwisko klienta jest różne od "Nowak", jestem zmuszony do pobrania wszystkich zamówień (możliwe jest zawężenie wyszukiwań, np podaj zamówienia tylko ze statusu 2.2 etc.) a następnie przefiltrowania ich pod kątem szukanego nazwiska. Zaczyna robić się nieciekawie przy większej ilości danych. All in all jest to dość dobre rozwiązanie, można je łatwo przenosić na inne języki.

Jeżeli chodzi o samo programowanie polecam pracę w Eclipse + tworzenie modeli obiektów. Każdy szanujący się WS posiada informacje opisujące go w pliku WSDL. Plik ma strukturę XMLa i zawiera wszystkie niezbędne informacje dotyczące korzystania z WS. Bardzo przydatne jest tworzenie modeli dla poszczególnych zapytań. Każde zapytania działa w dwie strony, wejście i wyjście. Dla przykładu poniżej połączenie + pobranie produktu (na zasadzie funkcji) + modele.

Klasa tworząca połączenie + gotowa funkcja do pobrania produktu
  1. class TestWS extends SoapClient{
  2.  
  3. private $WSDL = 'http://domena.pl/ws.wsdl';
  4.  
  5. public function __construct(){
  6. parent::SoapClient($this->WSDL);
  7. }
  8.  
  9. /**
  10. * @return Pobierz_produkt_OUT
  11. * @param int $id_produktu
  12. */
  13. public function pobierz_produkt($id_produktu){
  14. $query = new Pobierz_produkt_IN();
  15. $query->id_produktu = $id_produktu;
  16.  
  17. return $this->__soapCall('Pobierz_produkt', array($query));
  18. // lub
  19. return $this->Pobierz_produkt($query);
  20. }
  21.  
  22. }


Modele wejścia i wyjścia (nie są potrzebne ale baardzo pomagają w dalszej pracy)
  1. class Pobierz_produkt_IN{
  2. /**
  3. * @var int
  4. */
  5. public $id_produktu;
  6. }
  7.  
  8. class Pobierz_produkt_OUT{
  9. /**
  10. * @var int
  11. */
  12. public $id;
  13.  
  14. /**
  15. * @var string
  16. */
  17. public $nazwa;
  18.  
  19. /**
  20. * @var float
  21. */
  22. public $cena;
  23. }


Fragment WSDL na podstawie którego tworzysz modele
  1. <xsd:complexType name="Pobierz_produkt_IN">
  2. <xsd:all>
  3. <xsd:element name="id_produktu" type="xsd:int" nillable="false"/>
  4. </xsd:all>
  5. </xsd:complexType>
  6. <xsd:complexType name="Pobierz_produkt_OUT">
  7. <xsd:all>
  8. <xsd:element name="id" type="xsd:int" nillable="true"/>
  9. <xsd:element name="nazwa" type="xsd:string" nillable="true"/>
  10. <xsd:element name="cena" type="xsd:float" nillable="true"/>
  11. </xsd:all>
  12. </xsd:complexType>


Frament odpowiadający za nazwę funkcji
  1. <operation name="Pobierz_produkt">
  2. <documentation>Pobierz_produkt: zwraca dane o pordukcie</documentation>
  3. <input message="tns:Pobierz_produkt_REQUEST"/>
  4. <output message="tns:Pobierz_produkt_RESPONSE"/>
  5. </operation>


i na końcu samo wywołanie zapytania i wyświetlenie danych
  1. $test_ws = new TestWS();
  2. $id_produktu = 133;
  3.  
  4.  
  5. $call = $test_ws->pobierz_produkt($id_produktu);
  6.  
  7. print_r("Pordukt o id ".$id_produktu." ma nazwę ".$call->nazwa." i kosztuje ".$call->cena." PLN");
  8.  


Jeżeli masz więcej pytań, napisz post (IMG:style_emoticons/default/smile.gif)

Ten post edytował Puszy 7.02.2013, 11:10:49
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 12.10.2025 - 06:32