जीएसओएपी

From Vigyanwiki
Revision as of 21:04, 14 June 2023 by alpha>Indicwiki (Created page with "{{DISPLAYTITLE:gSOAP}} {{Infobox software | name = gSOAP | logo = | screenshot = | caption = | developer...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
gSOAP
Developer(s)Robert van Engelen
Initial releaseDecember 8, 2000; 23 years ago (2000-12-08)
Stable release
2.8.129 / June 11, 2023 (2023-06-11)
Written inC and C++
Operating systemCross-platform
TypeWeb development software
LicenseGPL v2, commercial licensing
Websitehttps://www.genivia.com/dev.html
https://sourceforge.net/projects/gsoap2/

gSOAP[1][2] SOAP/XML वेब सेवाओं और सामान्य XML डेटा बाइंडिंग के लिए C और C++ सॉफ़्टवेयर डेवलपमेंट टूलकिट है। C/C++ प्रकार की घोषणाओं के एक सेट को देखते हुए, संकलक-आधारित gSOAP उपकरण निर्दिष्ट C और C++ डेटा संरचनाओं के कुशल XML क्रमांकन के लिए स्रोत कोड में क्रमांकन रूटीन उत्पन्न करते हैं। क्रमबद्धता शून्य-प्रतिलिपि ओवरहेड लेता है।

इतिहास

जीएसओएपी टूलकिट 1999 में प्रोफेसर रॉबर्ट वैन एंगेलन द्वारा फ्लोरिडा स्टेट यूनिवर्सिटी में एक शोध परियोजना के रूप में शुरू किया गया था। इस परियोजना ने नए तरीके पेश किए[2]अत्यधिक कुशल XML पार्सिंग के लिए (पुल पार्सिंग)[3][4] और सीधे XML में और बाद में SOAP में भी C/C++ डेटा का क्रमांकन। परियोजना सफल हुई[5] XML स्कीमा (W3C) प्रकारों और C डेटा प्रकारों की एक विस्तृत विविधता के बीच प्रकार की सुरक्षा | प्रकार-सुरक्षित डेटा बाइंडिंग को परिभाषित करने पर | C/C++ डेटा प्रकार। टूलकिट सी/सी++ डेटा को सीधे भेजने और प्राप्त करने के लिए कुशल ऑटो-जेनरेट किए गए एक्सएमएल सीरियलाइज़र का उपयोग करके वेब सेवाओं के विकास और आह्वान को आसान बनाने के लिए स्वचालित प्रोग्रामिंग का उपयोग करता है। एक डोमेन-विशिष्ट कंपाइलर-आधारित टूल स्रोत कोड उत्पन्न करता है जो कुशलतापूर्वक मूल C/C++ डेटा संरचनाओं को XML और बैक में परिवर्तित करता है।[1] टूलकिट को SOAP वेब सेवा मैसेजिंग प्रोटोकॉल का समर्थन करने के लिए और विकसित किया गया था, जिसे लगभग उसी समय पेश किया गया था, इसलिए नाम gSOAP (जेनेरिक XML और SOAP) और वैज्ञानिक डेटा विनिमय के लिए दृष्टिकोण का उपयोग करने के लिए।[6] सॉफ्टवेयर का आगे का विकास और रखरखाव जेनिविया इंक के स्वामित्व में हुआ। इसमें नई WSDL और XML स्कीमा (W3C) प्रसंस्करण क्षमताओं के साथ-साथ कई WS- * वेब सेवा प्रोटोकॉल क्षमताओं जैसे WS- सुरक्षा अनुकूलन शामिल हैं। ,[7] XML-RPC मैसेजिंग, JSON डेटा फॉर्मेट के लिए समर्थन, Apache और IIS वेब सर्वर में gSOAP को एकीकृत करने के लिए प्लगइन मॉड्यूल और ग्रिड सेवाओं के लिए तृतीय-पक्ष प्लगइन्स।[8][9] gSOAP टूलकिट पोर्टेबल C/C++ में लिखा गया है और WSDL/XSD विनिर्देशों को WSDL/XSD मेटा-डेटा बाइंडिंग के लिए C/C++ स्रोत कोड में अनुवाद करने के लिए कनवर्टर को लागू करने के लिए अपना कोड उत्पन्न करके बूटस्ट्रैपिंग के एक रूप का उपयोग करता है। gSOAP सॉफ़्टवेयर को GPLv2 ओपन सोर्स लाइसेंस और वाणिज्यिक-उपयोग स्रोत कोड लाइसेंस के तहत लाइसेंस दिया गया है। जीएसओएपी सॉफ्टवेयर का व्यापक रूप से औद्योगिक परियोजनाओं में उपयोग किया जाता है[10] और मिशन-क्रिटिकल इन्फ्रास्ट्रक्चर।

एक्सएमएल वेब सेवा संचालन उदाहरण के द्वारा

एक होटल के रहने की दर को पुनः प्राप्त करने के लिए C में एक उदाहरण वेब सेवा संचालन, कई मेहमानों को एनोटेट रूप में घोषित किया जा सकता है

//gsoap ns service namespace: tempuri
//gsoap ns service style:     document
//gsoap ns service encoding:  literal
int ns__get_rate(char* hotel, int guests, float *rate);

फ़ंक्शन का अंतिम पैरामीटर हमेशा सेवा वापसी मान होता है, जिसे एक तरफ़ा संचालन के लिए शून्य के रूप में दर्शाया जा सकता है और कई सेवा वापसी मापदंडों को बंडल करने के लिए एक संरचना / वर्ग होना चाहिए। त्रुटि निदान के लिए फ़ंक्शन का int वापसी मान उपयोग किया जाता है।

ऑटो-जेनरेट किए गए साबुन_कॉल_एनएस__get_rate फ़ंक्शन का उपयोग करके सी में एक सेवा आमंत्रण निम्नानुसार निष्पादित किया गया है:

const char *URL = "http://www.example.com/hotels";
const char *action = NULL;
struct soap *ctx = soap_new();  // new context
float rate;
int err = soap_call_ns__get_rate(ctx, URL, action, "Happy Inn", 2, &rate);
if (err == SOAP_OK && rate < 100.00)
  lets_go();
soap_end(ctx);   // deallocate deserialized data
soap_free(ctx);  // deallocate context

लीगेसी C और C++ सिस्टम के लिए वेब सेवाओं के कार्यान्वयन की सुविधा के लिए, C/C++ में पहचानकर्ता नामों की उपसर्ग योग्यता को छोड़ा जा सकता है या कोलन नोटेशन द्वारा प्रतिस्थापित किया जा सकता है, उदाहरण के लिए ns:get_rate बजाय ns__get_rate। प्रोजेक्ट बिल्ड में उपयोग किए जाने वाले ऑटो-जेनरेट किए गए स्रोत कोड में विराम चिह्न हटा दिया गया है।

ऑटो-जेनरेट प्रॉक्सी क्लास का उपयोग कर सी ++ में एक सेवा आमंत्रण निम्नानुसार निष्पादित किया जाता है (प्रॉक्सी के डिफ़ॉल्ट एंडपॉइंट यूआरएल और एसओएपी एक्शन वैल्यू का उपयोग करके):

Proxy proxy;
float rate;
int err = proxy.get_rate("Happy Inn", 2, &rate);
if (err == SOAP_OK && rate < 100.00)
  lets_go();
proxy.destroy();  // deallocate deserialized data

एनोटेशन और पहचानकर्ता नामकरण परंपराओं का उपयोग करके, यानी फ़ंक्शन ns__get_rate के लिए उपसर्ग ns__ के साथ योग्यता और उदाहरण में //gsoap निर्देशों का उपयोग करके ns नामस्थान के गुणों की घोषणा करके, वेब सेवा संचालन के लिए एक बंधन स्थापित किया जाता है। ऑटो-जेनरेट की गई वेब सर्विसेज डिस्क्रिप्शन लैंग्वेज (WSDL) दस्तावेज़ एक अनुरोध संदेश, एक प्रतिक्रिया संदेश और गेट-रेट ऑपरेशन पोर्ट टाइप इंटरफ़ेस और SOAP बाइंडिंग को ns__get_rate फ़ंक्शन के लिए निम्नानुसार घोषित करता है:

<definitions name="Service" targetNamespace="tempuri" xmlns:tns="tempuri" xmlns:ns="tempuri"
  xmlns="http://schemas.xmlsoap.org/wsdl/">
...
<message name="get-rateRequest">
 <part name="parameters" element="ns:get-rate"/>
</message>
<message name="get-rateResponse">
 <part name="parameters" element="ns:get-rateResponse"/>
</message>

<portType name="ServicePortType">
 <operation name="get-rate">
  <input message="tns:get-rateRequest"/>
  <output message="tns:get-rateResponse"/>
 </operation>
</portType>

<binding name="Service" type="tns:ServicePortType">
 <SOAP:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
 <operation name="get-rate">
  <SOAP:operation soapAction=""/>
  <input>
   <SOAP:body parts="parameters" use="literal"/>
  </input>
  <output>
   <SOAP:body parts="parameters" use="literal"/>
  </output>
 </operation>
</binding>

जहां ऑपरेशन के अनुरोध और प्रतिक्रिया संदेश डब्लूएसडीएल के प्रकार खंड में परिभाषित एक्सएमएल तत्वों को संदर्भित करते हैं:

<types>
 <schema targetNamespace="tempuri" ...> 
  <element name="get-rate">
   <complexType>
    <sequence>
     <element name="hotel" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
     <element name="guests" type="xsd:int" minOccurs="1" maxOccurs="1"/>
    </sequence>
   </complexType>
  </element>
  <element name="get-rateResponse">
   <complexType>
    <sequence>
     <element name="rate" type="xsd:float" minOccurs="0" maxOccurs="1" nillable="true"/>
    </sequence>
   </complexType>
  </element>
 </schema>
</types>

इसी तरह, क्लाइंट और सर्वर C/C++ सोर्स कोड को WSDLs और XML स्कीमा के सेट से ऑटो-जनरेट किया जा सकता है। उपयुक्त सेवा संचालन को परिभाषित करके सेवाओं को पूरा किया जाना चाहिए। उदाहरण के लिए, इस डब्लूएसडीएल के लिए स्वत: उत्पन्न सी ++ सर्विस क्लास को get_rate विधि को निम्नानुसार परिभाषित करके पूरा किया जाना चाहिए:

int Service::get_rate(char *hotel, int guests, float *rate)
{
  *rate = ...  // determine the lodging rate of the hotel given the number of guests
  return SOAP_OK;
}

वेब सर्विस मैसेजिंग के लिए एक्सएमएल में मार्शल किए जा सकने वाले ऑपरेशन पैरामीटर के प्रकार पर कोई प्रतिबंध नहीं है, सिवाय इसके कि डेटा बाइंडिंग स्थापित करने के लिए कुछ प्रकार के डिक्लेरेशन कन्वेंशन और एनोटेशन का पालन किया जाना चाहिए।

उदाहरण के द्वारा बाध्यकारी एक्सएमएल डेटा

C/C++ डेटा प्रकारों के साथ XML डेटा बाइंडिंग स्थापित करने के लिए, gSOAP स्रोत कोड एनोटेशन के तीन मूल रूपों का उपयोग करता है: निर्देश, पहचानकर्ता नामकरण परंपराएं, और विराम चिह्न।

पदानुक्रमित कर्मचारी रिकॉर्ड के लिए C में पूरी तरह से एनोटेट संरचना घोषणा के रूप में प्रकट हो सकता है

//gsoap ns schema namespace: tempuri
//gsoap ns schema form:      qualified
struct ns__employee_record
{
   @char  *xml__lang  = "en";
   @int    ID         = 9999;
    char  *full_name         1:1;     
   $int    size              0:12;
    struct ns__employee_record *manages;
};

जहां निम्नलिखित एनोटेशन और सम्मेलनों का उपयोग किया जाता है:

  • पहचानकर्ता नामकरण परंपराओं द्वारा प्रकार और सदस्यों की नामस्थान योग्यता: ns__employee_record, xml__lang
  • सदस्यों के लिए विशेषताएँ: @char*, @int
  • सदस्यों के लिए डिफ़ॉल्ट मान: xml__lang = en, ID = 9999
  • minOccurs के रूप में घटना की कमी: XML सत्यापन के लिए maxOccurs: full_name 1:1, आकार 0:12
  • तत्व अनुक्रमों के गतिशील सरणियों में एक विशेष आकार के क्षेत्र की एक जोड़ी और एक सरणी सूचक सदस्य शामिल होता है: $int size; संरचना ns__employee_record *प्रबंधित करता है

जीएसओएपी उपकरण सी/सी++ डेटा प्रकारों को एक्सएमएल स्कीमा डेटा प्रकारों से/में परिवर्तित करते हैं। चूंकि सी नेमस्पेस का समर्थन नहीं करता है और स्ट्रक्चर/क्लास सदस्य नाम सी ++ में नेमस्पेस-योग्य नहीं हो सकते हैं, जीएसओएपी में पहचानकर्ता नामकरण सम्मेलनों का उपयोग इस संरचना और इसके सदस्यों को एक एक्सएमएल स्कीमा कॉम्प्लेक्स टाइप से बाध्य करने की अनुमति देता है जो स्वत: उत्पन्न होता है:

<schema targetNamespace="tempuri" xmlns:ns="tempuri"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3.org/2001/XMLSchema"
  elementFormDefault="qualified" attributeFormDefault="qualified">

  <complexType name="employee-record">
   <sequence>
    <element name="full-name" type="xsd:string" minOccurs="1" maxOccurs="1" nillable="true"/>
    <element name="manages" type="ns:employee-record" minOccurs="0" maxOccurs="12"/>
   </sequence>
   <attribute ref="xml:lang" use="default" default="en"/>
   <attribute name="ID" type="xsd:int" use="default" default="9999"/>
  </complexType>

</schema>

इसके अलावा, संघ सदस्य चयन के लिए एक विशेष चयनकर्ता क्षेत्र के साथ एनोटेट की गई संरचना/वर्ग में यूनियनों को स्कीमा पसंद कणों से/से मैप किया जाता है, एसटीएल कंटेनरों को अनुक्रम कणों से/से मैप किया जाता है, गणनाओं को एक्सएमएल स्कीमा सरल टाइप गणनाओं से/से मैप किया जाता है, और मानक सी/सी++ आदिम प्रकारों को एक्सएसडी प्रकारों से/से मैप किया जाता है। XSD स्कीमा को C/C++ डेटा प्रकारों में बदलने के लिए, वास्तविक मैपिंग एक प्रकार की मैपिंग फ़ाइल के साथ gSOAP में कॉन्फ़िगर करने योग्य है।

उदाहरण के लिए पदानुक्रमित कर्मचारी संरचना का एक उदाहरण एक्सएमएल में डिफ़ॉल्ट रूप से पेड़ के रूप में क्रमबद्ध है, उदाहरण के लिए

<ns:employee xmlns:ns="tempuri" xml:lang="en" ns:ID="12">
 <ns:full-name>Jane Doe</ns:full-name>
 <ns:manages xml:lang="en" ns:ID="34">
  <ns:full-name>John Doe</ns:full-name>
 </ns:manages>
 <ns:manages xml:lang="en" ns:ID="56">
  <ns:full-name>Bob Oz</ns:full-name>
  <ns:manages xml:lang="en" ns:ID="78">
   <ns:full-name>Alice Oz</ns:full-name>
  </ns:manages>
 </ns:manages>
</ns:employee>

जब SOAP एन्कोडिंग शैली सक्षम होती है, तो gSOAP में XML क्रमांकन, SOAP एन्कोडिंग नियमों के अनुसार सह-संदर्भित वस्तुओं और चक्रीय डेटा संरचनाओं का सम्मान करता है, जिसके परिणामस्वरूप XML आईडी-रेफरी किनारों के साथ होता है।

स्वत:-जनरेट किए गए XML डेटा बाइंडिंग में फ़ाइल, स्ट्रिंग या स्ट्रीम से पढ़ने और लिखने के संचालन शामिल हैं। उदाहरण के लिए, एक ns__employee_record ऑब्जेक्ट ने पढ़ने और लिखने के संचालन किए हैं:

int soap_read_ns__employee_record(struct soap*, ns__employee_record*);
int soap_write_ns__employee_record(struct soap*, const ns__employee_record*);

किसी XML फ़ाइल से कर्मचारी रिकॉर्ड पढ़ने के लिए:

struct soap *ctx = soap_new();
ctx->recvfd = open("employee.xml", O_RDONLY);
if (ctx->recvfd)
{
  ns__employee_record employee;
  if (soap_read_ns__employee_record(ctx, &employee) == SOAP_OK)
    ...
  close(ctx->recvfd);
}
soap_end(ctx);
soap_destroy(ctx); // also deletes employee data
soap_free(ctx);

पार्स किए गए एक्सएमएल को आंतरिक रूप से डेटा बाइंडिंग की बाधाओं के खिलाफ मान्य किया गया है।

एक्सएमएल बाकी एपीआई

एप्लिकेशन डेटा REST XML सेवा को/से भेजा और प्राप्त किया जा सकता है। XML डेटा बाइंडिंग REST XML API कॉल प्रदान करती है। उदाहरण के लिए, पिछले अनुभाग के ns__employee_record XML डेटा बाइंडिंग को देखते हुए, निम्नलिखित GET, PUT और POST ऑपरेशन स्वतः उत्पन्न होते हैं:

int soap_GET_ns__employee_record(struct soap*, const char *URL, ns__employee_record*);
int soap_PUT_ns__employee_record(struct soap*, const char *URL, const ns__employee_record*);
int soap_POST_send_ns__employee_record(struct soap*, const char *URL, const ns__employee_record*);
int soap_POST_recv_ns__employee_record(struct soap*, ns__employee_record*);

POST कार्यों को एक साथ बुलाया जाना चाहिए, पहले POST_send XML डेटा को समापन बिंदु URL पर भेजने के लिए और उसके बाद प्रतिक्रिया डेटा को स्वीकार करने के लिए POST_recv (एक अलग प्रकार का हो सकता है)।

प्राप्त XML डेटा बाइंडिंग की बाधाओं के खिलाफ आंतरिक रूप से मान्य है।

सुविधाएँ

  • स्रोत-से-स्रोत कोड जनरेशन के साथ स्वचालित प्रोग्रामिंग पर आधारित C ​​और C++ के लिए XML डेटा बाइंडिंग
  • एएनएसआई सी और आईएसओ सी ++ में अनुकूलन क्लाइंट/सर्वर स्रोत कोड ऑटो-जेनरेशन
  • एकीकृत उच्च गति, स्कीमा-विशिष्ट XML # XML सत्यापन के साथ पार्सिंग खींचें
  • वेब सेवा विवरण भाषा (डब्लूएसडीएल) 1.1 और 2.0
  • वेब सेवाएं SOAP 1.1 और 1.2
  • स्ट्रीमिंग संदेश संचरण अनुकूलन तंत्र (MTOM) और DIME/MIME अटैचमेंट
  • प्रतिनिधित्वात्मक राज्य स्थानांतरण (REST) ​​HTTP(S) 1.0/1.1
  • सत्यापित WS-I मूल प्रोफ़ाइल 1.0a, 1.1 और 1.2 अनुरूप
  • सत्यापित W3C डेटा बाइंडिंग के लिए स्कीमा पैटर्न, पूर्ण परीक्षण पैटर्न कवरेज
  • सी और सी ++ के लिए एक्सएमएल-आरपीसी
  • सी और सी ++ के लिए जेएसओएन
  • आरएसएस 0.91, 0.92, 2.0
  • डब्ल्यूएस-सुरक्षा
  • डब्ल्यूएस-नीति 1.2, 1.5 और डब्ल्यूएस-सुरक्षा नीति 1.2
  • WS-को संबोधित करते 2003/03, 2004/03, 2005/03
  • डब्ल्यूएस-रिलायबल मैसेजिंग 1.0 और 1.1
  • WS-डिस्कवरी 1.0/1.1
  • सोप-ओवर-यूडीपी
  • यूडीडीआई (यूडीडीआई) v2 एपीआई
  • HTTP बेसिक और डाइजेस्ट ऑथेंटिकेशन, NTLM ऑथेंटिकेशन, प्रॉक्सी ऑथेंटिकेशन
  • एसएसएल सत्र कैशिंग के साथ एसएसएल/टीएलएस के साथ आईपीवी4 और आईपीवी6 (ओपनएसएसएल या जीएनयूटीएलएस पर आधारित)
  • एक्सएमएल संपीड़न gzip के साथ
  • Apache 1.x और 2.0 मॉड्यूल, IIS Isapi और Wininet मॉड्यूल, CGI और FastCGI
  • स्टैंड-अलोन वेब सर्वर सपोर्ट (मल्टीथ्रेडेड, पूलिंग)
  • डीललोकेशन और लीक डिटेक्शन के साथ इंटीग्रेटेड मेमोरी मैनेजमेंट
  • अतिरिक्त क्षमताओं के लिए प्लग-इन के साथ आर्किटेक्चर
  • अंतर्राष्ट्रीयकरण/स्थानीयकरण समर्थन (UTF8, UCS4, MB एनकोडिंग, आदि)
  • प्लेटफ़ॉर्म तटस्थ, छोटे उपकरणों का समर्थन करता है (सिम्बियन, VxWorks, Android, iPhone)

संदर्भ

  1. 1.0 1.1 van Engelen, Robert (2008). "C और C++ वेब सेवा घटकों के साथ सेवा-उन्मुख कंप्यूटिंग के लिए एक रूपरेखा". ACM Transactions on Internet Technology. 8 (3): 106–115. doi:10.1145/1361186.1361188.
  2. 2.0 2.1 van Engelen, Robert; Gallivan, Kyle (2002). वेब सेवाओं और पीयर-टू-पीयर कंप्यूटिंग नेटवर्क के लिए gSOAP टूलकिट. IEEE International Symposium on Cluster Computing and the Grid. pp. 128–135.
  3. Head, Michael; Govinderaju, Madhu; Slominski, Aleksander; Liu, Pu; Abu-Ghazaleh, Nayef; van Engelen, Robert; Chiu, Kenneth (2005). ग्रिड वेब सेवाओं में अनुप्रयोगों के लिए बेंचमार्किंग एक्सएमएल प्रोसेसर. IEEE/ACM Supercomputing (SC).
  4. Head, Michael; Govinderaju, Madhu; van Engelen, Robert; Zhang, Wei (2006). ग्रिड वेब सेवाओं में अनुप्रयोगों के लिए बेंचमार्किंग एक्सएमएल प्रोसेसर. IEEE/ACM Supercomputing (SC).
  5. van Engelen, Robert; Govindaraju, Madhu; Zhang, Wei (2006). XML वेब सेवाओं में दूरस्थ वस्तु सुसंगतता की खोज. International Conference on Web Services (ICWS). pp. 249–256.
  6. van Engelen, Robert (2003). वैज्ञानिक कंप्यूटिंग के लिए वेब सेवाओं के साथ SOAP लिफाफे को आगे बढ़ाना. Conference on Web Services (ICWS). pp. 346–354.
  7. Robert, van Engelen; Zhang, Wei (2008). वेब सेवा सुरक्षा प्रदर्शन अनुकूलन का अवलोकन और मूल्यांकन. IEEE International Conference on Web Services (ICWS). pp. 137–144.
  8. Aloisio, Giovanni; Cafaro, Massimo; Epicoco, Italo; Lezzi, Daniele; van Engelen, Robert (2005). The GSI plug-in for gSOAP: Enhanced Security, Performance, and Reliability. International Conference on Information Technology (ITCC). pp. 304–309.
  9. Cafaro, Massimo; Lezzi, Daniele; Fiore, Sandro; Aloisio, Giovanni; van Engelen, Robert (2007). The GSI plug-in for gSOAP: building cross-grid interoperable secure grid services. International Conference on Parallel Processing and Applied Mathematics (PPAM) 2007, workshop on Models, Algorithms and Methodologies for Grid-enabled Computing Environment (MAMGCE), Springer Verlag LNCS Volume 4967. pp. 894–901.
  10. Challener, David; Yoder, Kent; Catherman, Ryan; Safford, David; Van Doorn, Leendert (2007). भरोसेमंद कंप्यूटिंग के लिए एक व्यावहारिक गाइड. Pearson Education.


यह भी देखें

श्रेणी:वेब सेवाएं श्रेणी:वेब सेवा विनिर्देश