Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

Turkey Oracle Applications Users Group Web Service Uygulaması Temel Web Service özellikleri ve Oracle PL/SQL ile web servis çağırmak. Ümit Varol / Diveya.

Benzer bir sunumlar


... konulu sunumlar: "Turkey Oracle Applications Users Group Web Service Uygulaması Temel Web Service özellikleri ve Oracle PL/SQL ile web servis çağırmak. Ümit Varol / Diveya."— Sunum transkripti:

1 Turkey Oracle Applications Users Group Web Service Uygulaması Temel Web Service özellikleri ve Oracle PL/SQL ile web servis çağırmak. Ümit Varol / Diveya Bilgi Sistemleri 04/12/ İstanbul

2 İstanbul'10 20 Mayıs Web Servis Nedir? Web servisler, web teknolojisi üzerinde çalışan veri yayınlama ve veri toplama araçlarıdır. Web servisler, açık protokolleri kullanır ve çok temel olarak XML ve HMTL yapılarıyla çalışır. Web servisler, herhangi bir uygulamanızı internet tabanlı bir uygulamaya dönüştürür ve herhangi bir uygulamanın, sizin uygulamanıza internet üzerinden ulaşmasını sağlar. XML yapısında oluşturulan sorular ve cevaplar ile çalışır. f(x) Service Requester Service Provider Public Internet SOAP XML

3 İstanbul'10 20 Mayıs İçerik Web Servis nedir, nasıl çalışır ? Örnek Web Servis senaryosu. Web Servis Response ve Request mesajlarının yapısı. Örnek Kod. UTL_HTTP nedir, nasıl çalışır. Örnek Web Servis senaryosu, devam! PL/SQL Örnek Kod. Notlar.

4 İstanbul'10 20 Mayıs Neden Web Servis? Birlikte çalışabilirliği çok yüksektir. Her platformda ve en az kaynakla üretilmesi ve bakım desteği mümkündür. Web servisler çok yaygın olarak bilinen açık protokollerini kullanır, veriyi paketlemek için XML, taşımak için SOAP gibi. Web servisleri kullanarak, uygulamanız içindeki fonksiyonlarınızı veya uygulamanızda ürettiğiniz mesajlarınızı dünyanın geri kalanına yayınlayabilirsiniz. Çok çeşitli uygulamalar geliştirebilirsiniz. (Bilet Sorgulama, İlk 10 listesi, Sipariş Alma, Anında Tercüme gibi) Farklı ortamlardaki, tamamen birbirinden farklı yapıdaki sistemlerin veri paylaşımı için ideal bir iletişim aracıdır. Bu nedenle son zamanlarda en çok kullanılan entegrasyon biçimidir.

5 İstanbul'10 20 Mayıs Web Service Nasıl Çalışır? Web hizmetleri platformu elemanları: SOAP (Simple Object Access Protocol, Basit Nesne Erişim Protokolü) WSDL (Web Services Description Language, Web Servis Tanımlama Dili) UDDI (Universal Description, Discovery and Integration, Evrensel Tanım, Keşif ve Entegrasyon) f(x) Service Requester Service Provider Public Internet SOAP XML Service Broker UDDI WSDL

6 İstanbul'10 20 Mayıs SOAP Nedir? Simple Object Access Protocol, Basit Nesne Erişim Protokolü SOAP, HTTP üzerinden bilgi paylaşımı için kullanılan XML tabanlı bir protokoldür. Ya da kısaca, web servislere bağlanmak için kullanılan protokoldür. Çok özetle SOAP, bir iletişim protokolüdür. İnternet üzerinden iletişim kurmak için tasarlanmıştır. Kolay kullanılabilir bir mesaj gönderme yöntemidir. Hem platform bağımsız hem de dil bağımsızdır. SOAP, XML tabanlıdır, basittir ve genişletilebilir. SOAP ile firewall sorununuz en azdır. SOAP bir W3C standardıdır. Daha detaylı bilgi için W3C’nin sitesini ziyaret edebilirsiniz. –Http://www.w3c.com –Http://www.w3schools.com/w3c/w3c_soap.asp

7 İstanbul'10 20 Mayıs SOAP Nedir? Herhangi bir SOAP mesajının 3 temel elemanı vardır : –Envelope –Header (Zorunlu değil) –Body Temel olarak bir SOAP mesajı 3 şekilde oluşabilir : –Metod Çağırımı –Cevap Mesajı –Hata Mesajı Metod çağırma mesajı da temel olarak 2 amaçla kullanılabilir : –Get : Bilgi almak için –Set : Bilgi göndermek için SOAP : ENVELOPE SOAP : HEADER SOAP : BODY

8 İstanbul'10 20 Mayıs WSDL nedir? Web Services Description Language, Web Servis Tanımlama Dili WSDL, web servisleri tanımlamak için kullanılan XML tabanlı bir dildir. WSDL, web servislerin içeriğini tanıtır. WSDL, web servislerin bulunmasını sağlar. Bir çok uygulama geliştirme ortamı tarafından otomatik algılanır. WSDL bir W3C standardıdır. Daha detaylı bilgi için W3C’nin sitesini ziyaret edebilirsiniz. –Http://www.w3.org/TR/wsdl

9 İstanbul'10 20 Mayıs UDDI nedir? Universal Description, Discovery and Integration Evrensel Tanım, Keşif ve Entegrasyon UDDI, kurumların web servislerini kaydettikleri ve başka web servisleri aradıkları bir dizin servisidir. UDDI, web servisler hakkında bilgilerin bulunduğu bir dizindir. UDDI, web servislerin WSDL tanımlama arayüzlerinin bulunduğu bir dizindir. UDDI, SOAP aracılığı ile çalışır. UDDI servisi Microsoft.NET platformu içindedir. Daha detaylı bilgi için W3C’nin WSDL sitesini ziyaret edebilirsiniz. –Http://www.w3.org/TR/wsdl –Http://www.w3schools.com/wsdl/wsdl_uddi.asp

10 İstanbul'10 20 Mayıs Application Örnek Senaryo f(x) SOAP ENVELOPE Service Requester Service Provider Public Internet Application URL WSDL 1 2 SOAP BODY Request 3 4 SOAP ENVELOPE SOAP BODY Response 5 1.Çağıracağımız web servisin URL tanıtım adresi ile açıklama sayfasına veya WSDL dosyasına ulaşabiliriz. 2.Elde ettiğimiz WSDL ile kendi uygulamamızı otomatik veya kendimiz geliştirebiliriz. 3.Uygulamamız HTTP erişimine olanaklı yazılım ve ağ altyapısında olmalıdır. 4.Çağrılacak metoda uygun XML formatında talep mesajı gönderilmelidir. 5.Gelen XML formatındaki cevap çözümlenerek işlenebilir. f(x)

11 İstanbul'10 20 Mayıs Örnek Kod / Response Çağıracağımız web servisi sağlayacak kurumdan elde ettiğimiz URL ile bir web tarayıcısından ilgili sayfaya ulaşarak aldığımız bilgi aşağıdaki gibi olabilir. POST /ws_DEMO/ws_DEMO.asmx HTTP/1.1 Host: Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http:// /DEMO_Siparis_FNC" Bu servis “POST” metodu ile istekte bulunulacak ve “HTTP/1.1” standardı ile haberleşilecektir. Web servis, ilgili domain altında “/ws_DEMO/ws_DEMO.asmx” adresinde bulunmaktadır. Web servisinin bulunduğu sunucu “ ” adresindedir. Web servisi içinde SOAP standardına uygun olarak istekte bulunulacak fonksiyonun adresi ise "http:// /DEMO_Siparis_FNC" şeklindedir. Son olarak göndereceğimiz mesajın uzunluğuda “length” bilgisi ile bildirilmelidir. “URL Header” bilgileri SOAP ENVELOPE SOAP BODY Request

12 İstanbul'10 20 Mayıs Örnek Kod / Response Çağıracağımız web servisi sağlayacak kurumdan elde ettiğimiz URL ile bir web tarayıcısından ilgili sayfaya ulaşarak aldığımız bilgi aşağıdaki gibi olabilir. int string int SOAP ENVELOPE SOAP BODY Request f(x)

13 İstanbul'10 20 Mayıs Örnek Kod / Request Çağıracağımız web servisi sağlayacak kurumdan elde ettiğimiz URL ile bir web tarayıcısından ilgili sayfaya ulaşarak aldığımız bilgi aşağıdaki gibi olabilir. HTTP/ OK Content-Type: text/xml; charset=utf-8 Content-Length: length Bir URL request gönderdiğimiz için mutlaka bir URL request oluşacaktır. İstekte bulunacağımız Web servise gelecek cevap yine “HTTP/1.1” standardında olacaktır. Gelen cevapla birlikte, web sunucusunun geri döndürdüğü bir durum kodu olacaktır. Bu durum kodu yine genel bir standart olarak eğer “200” ise web sunucusundan sağlıklı olarak cevap dönmüş demektir. Buradan dönen 200 değeri, sadece sağlıklı bir cevap alacağınız anlamına gelir, çağrılan Web servis ile yapılmak istenen işlemin neticesini gösteren bir cevap değildir. Web servis ile yapılan işlem neticesinde oluşan cevap ise alacağınız mesajın içerisinde gelecektir. Web servisin sağlıklı cevap vermemesi durumunda ise genellikle 500 değeri döner, bunun dışında da muhtelif, bir çok hata kodu bulunmaktadır. –Http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html SOAP ENVELOPE SOAP BODY Response “URL Header” bilgileri

14 İstanbul'10 20 Mayıs Örnek Kod / Request Çağıracağımız web servisi sağlayacak kurumdan elde ettiğimiz URL ile bir web tarayıcısından ilgili sayfaya ulaşarak aldığımız bilgi aşağıdaki gibi olabilir. string SOAP ENVELOPE SOAP BODY Response f(x)

15 İstanbul'10 20 Mayıs Örnek Kod / Request Web servisin sorunsuz olarak çalıştığı ve bir cevap ürettiği durumda, size dönecek cevap aşağıdaki gibi olacaktır. string Web servisin olası bir hata veya geçersiz parametreden kaynaklı olarak hata ile tamamlanması durumda ise size dönecek cevap aşağıdaki gibi olacaktır. string Bu noktadan sonra yapılması gereken, gelen cevabı bir XML Parser ile çözerek elde edeceğiniz cevabı yorumlamaktır. SOAP ENVELOPE SOAP BODY Response

16 İstanbul'10 20 Mayıs UTL_HTTP Nedir? HTTP – Hyper Text Markup Language, Zengin Metin İşaretleme Dili HTML aracılığıyla PL/SQL’den dış ortamlara ulaşmayı sağlar. Bu paket ile internet üzerinden farklı sistemler üzerindeki verilere erişebilirsiniz. Bu paket ayrıca HTTPS olarak da bilinen HTTP üzerinden SSL, Secure Socket Layer protokolünüde desteklemektedir. Bu paket ile doğrudan veya HTTP proxy üzerinden bir web sayfasına bağlanabilirsiniz. Standart Oracle kütüphanesidir (7.3.4’den itibaren) –[ORACLE_HOME] / rdbms / admin / utlhttp.sql

17 İstanbul'10 20 Mayıs UTL_HTTP Nasıl Çalışır? UTL_HTTP paketi ile doğrudan bir web sitesine ulaşmanın iki basit yolu vardır. –UTL_HTTP.Request Bu fonksiyon tüm web sitesini tek bir String olarak döndürür. declare t_result varchar2(4000); begin t_result := utl_http.request('http://www.demo.com/index.html'); -- t_result ile istediğiniz işlemi yapın end; –UTL_HTTP.Request_Lines Bu fonksiyon ise web sitesini bir PL/SQL tablosu gibi döndürür. declare t_part utl_http.html_pieces; begin t_part := utl_http.request_lines('http://www.demo.com/index.html'); for i in 1.. t_part.count loop -- t_part(i) ile istediğiniz işlemi yapın; end loop; end;

18 İstanbul'10 20 Mayıs UTL_HTTP Nasıl Çalışır? UTL_HTTP paketinin temel akış şeması: –Request –Response

19 İstanbul'10 20 Mayıs UTL_HTTP Nasıl Çalışır? UTL_HTTP paketi ile bir URL’den HTTP ile istekte bulunmak için, –Request Begin_Request( url IN VARCHAR2, method IN VARCHAR2 DEFAULT 'GET', http_version IN VARCHAR2 DEFAULT NULL) RETURN HTTP_Request_Type; Set_Header( req IN OUT NOCOPY HTTP_Request_Type, name IN VARCHAR2, value IN VARCHAR2 DEFAULT NULL ); Write_Text( req IN OUT NOCOPY HTTP_Request_Type, data IN VARCHAR2 CHARACTER SET ANY_CS ); End_Request (req IN OUT NOCOPY HTTP_Request_Type); –Response Get_Response( req IN OUT NOCOPY HTTP_Request_Type, return_info_response IN BOOLEAN DEFAULT FALSE) RETURN HTTP_Response_Type; Read_Text( resp IN OUT NOCOPY HTTP_Response_Type, data OUT NOCOPY VARCHAR2 CHARACTER SET ANY_CS, len IN PLS_INTEGER DEFAULT NULL ); End_Response (resp IN OUT NOCOPY HTTP_Response_Type); f(x) SOAP ENVELOPE SOAP BODY Request f(x) SOAP ENVELOPE SOAP BODY Response

20 İstanbul'10 20 Mayıs Örnek Senaryo, Devam! 1.Çağıracağımız web servis için gereken parametreleri içeren bir fonksiyon ile içeriği oluşturabiliriz. 2.Oluşturduğumuz içeriği XML formatında düzenleyerek bir String değişken içine atabiliriz. 3.Oluşturduğumuz XML talep mesajını iletmek için bir SOAP Envelope oluşturmalıyız. 4.Artık mesajımızı karşı tarafa gönderebiliriz. Application f(x) URL SOAP ENVELOPE Service Requester Service Provider Public Internet Application SOAP BODY Request 1 SOAP ENVELOPE SOAP BODY Response 2 f(x)

21 İstanbul'10 20 Mayıs Örnek Senaryo, Devam! int string Application f(x) URL SOAP ENVELOPE Service Requester Service Provider Public Internet Application SOAP BODY Request 1 f(x) SOAP ENVELOPE SOAP BODY Request Declare l_envelope_req VARCHAR2(1000);

22 İstanbul'10 20 Mayıs UTL_HTTP ile Request! UTL_HTTP paketi ile bir URL’den HTTP ile istekte bulunmak için, Request –Begin_Request( url IN VARCHAR2, method IN VARCHAR2 DEFAULT 'GET', http_version IN VARCHAR2 DEFAULT NULL) RETURN HTTP_Request_Type; l_httl_request := UTL_HTTP.Begin_Request( ‘http:// /ws_DEMO/ws_DEMO.asmx’, ’POST’, ’HTTP/1.1’ ); –Set_Header( req IN OUT NOCOPY HTTP_Request_Type, name IN VARCHAR2, value IN VARCHAR2 DEFAULT NULL ); UTL_HTTP.set_header( l_httl_request, 'Content-Type', 'text/xml; charset=utf-8'); UTL_HTTP.set_header( l_httl_request, 'Content-Length', LENGTH( l_envelope_req )); UTL_HTTP.set_header( l_httl_request, 'SOAPAction', 'http:// /DEMO_Siparis_FNC'); –Write_Text( req IN OUT NOCOPY HTTP_Request_Type, data IN VARCHAR2 CHARACTER SET ANY_CS ); UTL_HTTP.write_text( l_httl_request, l_envelope_req );

23 İstanbul'10 20 Mayıs Örnek Senaryo, Devam! string Application f(x) Service Requester Service Provider Public Internet Application SOAP ENVELOPE SOAP BODY” Response 2 f(x) Declare l_envelope_resp VARCHAR2(1000); SOAP ENVELOPE SOAP BODY” Response

24 İstanbul'10 20 Mayıs UTL_HTTP ile Response! UTL_HTTP paketi ile isteğimize verilen cevabı PL/SQL ortamında almak, Response –Get_Response(req IN OUT NOCOPY HTTP_Request_Type, return_info_response IN BOOLEAN DEFAULT FALSE) RETURN HTTP_Response_Type; l_http_response := UTL_HTTP.get_response( l_httl_request ); –Read_Text(resp IN OUT NOCOPY HTTP_Response_Type, data OUT NOCOPY VARCHAR2 CHARACTER SET ANY_CS, len IN PLS_INTEGER DEFAULT NULL ) UTL_HTTP.read_text ( l_http_response, l_envelope_resp); –End_Response(resp IN OUT NOCOPY HTTP_Response_Type) UTL_HTTP.end_response( l_http_response); –HTTP Status Kontrolü (200, 500, vs..) stcd := l_http_response.status_code

25 İstanbul'10 20 Mayıs Örnek Senaryo, Devam! Elde ettiğimiz XML formatındaki cevabı çözümlemek için aşağıdaki gibi bir çalışma yapabiliriz. l_response := XMLTYPE.createxml( l_envelope_resp); l_response := l_response.extract ('/Soap:Envelope/Soap:Body/child::node()', 'xmlns:Soap="http://schemas.xmlsoap.org/soap/envelope/"'); l_http_st_code := l_http_response.status_code; if l_http_st_code = 200 then DBMS_OUTPUT.put_line(‘Servis Başarı ile Çağrıldı.’); DBMS_OUTPUT.put_line(l_response.getstringval()); elsif l_http_st_code = 500 then DBMS_OUTPUT.put_line(‘Servis Cevap Döndüremedi.’); DBMS_OUTPUT.put_line(l_response.getstringval()); else DBMS_OUTPUT.put_line(‘Servise Ulaşılamadı!’); end if; SOAP ENVELOPE SOAP BODY” Response Declare l_response VARCHAR2(1000); XML

26 İstanbul'10 20 Mayıs Kodlara Genel Bakış Declare l_envelope_resp VARCHAR2(32767); l_envelope_req VARCHAR2(32767); l_httl_request UTL_HTTP.req; l_http_response UTL_HTTP.resp; l_response XMLTYPE; l_http_st_code VARCHAR2(10); Begin l_httl_request := UTL_HTTP.Begin_Request( ‘http:// /ws_DEMO/ws_DEMO.asmx’, ’POST’, ’HTTP/1.1’ ); UTL_HTTP.set_header( l_httl_request, 'Content-Type', 'text/xml; charset=utf-8'); UTL_HTTP.set_header( l_httl_request, 'Content-Length', LENGTH( l_envelope_req )); UTL_HTTP.set_header( l_httl_request, 'SOAPAction', 'http:// /DEMO_Siparis_FNC'); UTL_HTTP.write_text( l_httl_request, l_envelope_req ); l_http_response := UTL_HTTP.get_response( l_httl_request ); UTL_HTTP.read_text ( l_http_response, l_envelope_resp); UTL_HTTP.end_response( l_http_response); l_response := XMLTYPE.createxml( l_envelope_resp); l_response := l_response.extract ('/Soap:Envelope/Soap:Body/child::node()', 'xmlns:Soap="http://schemas.xmlsoap.org/soap/envelope/"'); l_http_st_code := l_http_response.status_code; if l_http_st_code = 200 then DBMS_OUTPUT.put_line(‘Servis Başarı ile Çağrıldı.’); DBMS_OUTPUT.put_line(l_response.getstringval()); elsif l_http_st_code = 500 then DBMS_OUTPUT.put_line(‘Servis Cevap Döndüremedi.’); DBMS_OUTPUT.put_line(l_response.getstringval()); else DBMS_OUTPUT.put_line(‘Servise Ulaşılamadı!’); end if; End;

27 İstanbul'10 20 Mayıs Notlar UTL_HTTP 45 adet fonksiyon içeren bir pakettir. Diğer özelliklerinide incelemek faydalı olacaktır. XMLTYPE Oracle tarafından sunulan ve XML verileri işlemeyi kolaylaştıran geliştirilmiş bir veri tipidir. Veri içeriğinin bazı fonksiyonlar yardımı ile kullanımına olanak sağlar. HTML Status kodları ile ilgili W3.org sitesinden, – VARCHAR2 tipinin PL/SQL içindeki boyutu byte olabilmekle birlikte veritabanında sadece 4000 byte olabiliyor. Bu detaya dikkat etmek faydalı olacaktır.


"Turkey Oracle Applications Users Group Web Service Uygulaması Temel Web Service özellikleri ve Oracle PL/SQL ile web servis çağırmak. Ümit Varol / Diveya." indir ppt

Benzer bir sunumlar


Google Reklamları