JavaRush /جاوا بلاگ /Random-UR /ویب سروسز۔ مرحلہ 1۔ ویب سروس کیا ہے اور اس کے ساتھ کیسے ک...
eGarmin
سطح

ویب سروسز۔ مرحلہ 1۔ ویب سروس کیا ہے اور اس کے ساتھ کیسے کام کیا جائے؟

گروپ میں شائع ہوا۔
موضوع کا عنوان واقعی ایک سوال ہے، کیونکہ... میں خود نہیں جانتا کہ یہ کیا ہے اور پہلی بار میں اس مضمون کے فریم ورک کے اندر اس کے ساتھ کام کرنے کی کوشش کروں گا۔ میں صرف اس بات کی ضمانت دے سکتا ہوں کہ ذیل میں پیش کردہ کوڈ کام کرے گا، لیکن میرے جملے صرف مفروضے اور اندازے ہوں گے کہ میں خود یہ سب کیسے سمجھتا ہوں۔ تو چلو چلتے ہیں... ویب سروسز۔  مرحلہ 1۔ ویب سروس کیا ہے اور اس کے ساتھ کیسے کام کیا جائے؟  - 1

تعارف

ہمیں شروع کرنے کی ضرورت ہے کہ ویب سروسز کا تصور کیوں بنایا گیا تھا۔ جب تک یہ تصور دنیا میں ظاہر ہوا، ٹیکنالوجیز پہلے سے موجود تھیں جو ایپلی کیشنز کو ایک فاصلے پر بات چیت کرنے کی اجازت دیتی تھیں، جہاں ایک پروگرام دوسرے پروگرام میں کچھ طریقہ کو کال کر سکتا تھا، جسے کسی دوسرے شہر یا یہاں تک کہ ملک میں موجود کمپیوٹر پر لانچ کیا جا سکتا تھا۔ اس سب کو مختصراً RPC (ریموٹ پروسیجر کالنگ) کہا جاتا ہے۔ مثالوں میں CORBA ٹیکنالوجیز، اور Java - RMI (ریموٹ میتھڈ انووکنگ) شامل ہیں۔ اور ان میں سب کچھ اچھا لگتا ہے، خاص کر CORBA میں، کیونکہ... آپ کسی بھی پروگرامنگ زبان میں اس کے ساتھ کام کر سکتے ہیں، لیکن کچھ ابھی بھی غائب تھا۔ مجھے یقین ہے کہ CORBA کا نقصان یہ ہے کہ یہ سادہ HTTP کے بجائے اپنے کچھ نیٹ ورک پروٹوکولز کے ذریعے کام کرتا ہے، جو کسی بھی فائر وال کے ذریعے فٹ ہو جائے گا۔ ویب سروس کا خیال ایک RPC بنانا تھا جسے HTTP پیکٹ میں داخل کیا جائے گا۔ اس طرح معیار کی ترقی کا آغاز ہوا۔ اس معیار کے بنیادی تصورات کیا ہیں:
  1. صابن _ ریموٹ طریقہ کار کو کال کرنے سے پہلے، آپ کو اس کال کو SOAP فارمیٹ میں XML فائل میں بیان کرنا ہوگا۔ SOAP بہت سے XML مارک اپ میں سے ایک ہے جو ویب سروسز میں استعمال ہوتے ہیں۔ ہر وہ چیز جسے ہم HTTP کے ذریعے کہیں بھیجنا چاہتے ہیں پہلے اسے XML SOAP کی تفصیل میں تبدیل کیا جاتا ہے، پھر اسے HTTP پیکٹ میں بھرا جاتا ہے اور TCP/IP کے ذریعے نیٹ ورک پر موجود دوسرے کمپیوٹر کو بھیجا جاتا ہے۔
  2. ڈبلیو ایس ڈی ایل ایک ویب سروس ہے، یعنی ایک پروگرام جس کے طریقوں کو دور سے کہا جاسکتا ہے۔ لیکن اسٹینڈرڈ کا تقاضا ہے کہ اس پروگرام کے ساتھ ایک تفصیل ہو جس میں کہا گیا ہو کہ "ہاں، آپ ٹھیک کہتے ہیں - یہ واقعی ایک ویب سروس ہے اور آپ اس سے فلاں فلاں طریقوں کو کال کر سکتے ہیں۔" اس تفصیل کی نمائندگی ایک اور XML فائل کے ذریعے کی گئی ہے، جس کا فارمیٹ مختلف ہے، یعنی WSDL۔ وہ. WSDL صرف ایک XML فائل ہے جو ویب سروس کو بیان کرتی ہے اور اس سے زیادہ کچھ نہیں۔
آپ اتنے مختصراً کیوں پوچھتے ہیں؟ کیا آپ زیادہ مخصوص نہیں ہو سکتے؟ یہ شاید ممکن ہے، لیکن ایسا کرنے کے لیے آپ کو T. Mashnin، "Java Web Services" جیسی کتابوں کی طرف رجوع کرنا پڑے گا۔ وہاں، پہلے 200 صفحات پر، SOAP اور WSDL معیارات کے ہر ٹیگ کی تفصیلی وضاحت موجود ہے۔ کیا یہ کرنے کے قابل ہے؟ میری رائے میں، نہیں، کیونکہ... یہ سب جاوا میں خود بخود بن جاتا ہے، اور آپ کو صرف ان طریقوں کے مواد کو لکھنے کی ضرورت ہے جنہیں دور سے بلایا جانا چاہیے۔ لہذا، ایک API جیسا کہ JAX-RPC جاوا میں نمودار ہوا۔ اگر کوئی نہیں جانتا ہے، جب وہ کہتے ہیں کہ جاوا میں فلاں اور فلاں API ہے، تو اس کا مطلب ہے کہ کلاسوں کے سیٹ کے ساتھ ایک پیکیج ہے جو زیر بحث ٹیکنالوجی کو سمیٹتا ہے۔ JAX-RPC وقت کے ساتھ ورژن سے ورژن تک تیار ہوا اور آخر کار JAX-WS بن گیا۔ واضح طور پر WS کا مطلب WebService ہے اور آپ سوچ سکتے ہیں کہ یہ صرف RPC کا نام تبدیل کرنا ان دنوں ایک مشہور بز ورڈ کے طور پر ہے۔ یہ سچ نہیں ہے، کیونکہ اب ویب سروسز اصل خیال سے ہٹ گئی ہیں اور آپ کو نہ صرف ریموٹ طریقوں سے کال کرنے کی اجازت دیتی ہے بلکہ SOAP فارمیٹ میں دستاویزی پیغامات بھیجنے کی بھی اجازت دیتی ہے۔ میں نہیں جانتا کہ اس کی ابھی ضرورت کیوں ہے؛ اس بات کا امکان نہیں ہے کہ یہاں جواب "صرف اس صورت میں ہوگا جب اس کی ضرورت ہو۔" میں خود مزید تجربہ کار ساتھیوں سے سیکھنا چاہوں گا۔ اور آخر میں، پھر JAX-RS نام نہاد RESTful ویب سروسز کے لیے نمودار ہوا، لیکن یہ ایک الگ مضمون کا موضوع ہے۔ تعارف یہاں ختم ہو سکتا ہے، کیونکہ... اگلا ہم JAX-WS کے ساتھ کام کرنا سیکھیں گے۔

عمومی نقطہ نظر

ویب سروسز میں ہمیشہ ایک کلائنٹ اور سرور ہوتا ہے۔ سرور ہماری ویب سروس ہے اور اسے بعض اوقات اختتامی نقطہ کہا جاتا ہے (جیسا کہ، اختتامی نقطہ جہاں کلائنٹ کے SOAP پیغامات پہنچتے ہیں)۔ ہمیں مندرجہ ذیل کام کرنے کی ضرورت ہے:
  1. ہماری ویب سروس کے انٹرفیس کی وضاحت کریں۔
  2. اس انٹرفیس کو لاگو کریں۔
  3. ہماری ویب سروس شروع کریں۔
  4. ایک کلائنٹ لکھیں اور مطلوبہ ویب سروس کے طریقے کو دور سے کال کریں۔
آپ مختلف طریقوں سے ویب سروس شروع کر سکتے ہیں: یا تو طریقہ کے ساتھ کلاس کی وضاحت کریں mainاور ویب سروس کو براہ راست بطور سرور لانچ کریں، یا اسے ٹامکیٹ یا کسی دوسرے سرور پر تعینات کریں۔ دوسری صورت میں، ہم خود کوئی نیا سرور لانچ نہیں کرتے اور کمپیوٹر پر کوئی اور پورٹ نہیں کھولتے، بلکہ ٹامکیٹ سرولیٹ کنٹینر کو صرف یہ بتاتے ہیں کہ "ہم نے یہاں ویب سروس کی کلاسیں لکھی ہیں، براہ کرم انہیں شائع کریں تاکہ ہر وہ شخص جو آپ سے رابطہ کرے ہماری ویب سروس استعمال کریں۔" ویب سروس شروع کرنے کا طریقہ کچھ بھی ہو، ہمارے پاس ایک ہی کلائنٹ ہوگا۔

سرور

آئیے آئیڈیا شروع کریں اور ایک نیا پروجیکٹ بنائیں Create New Project ۔ HelloWebService نام کی وضاحت کریں اور نیکسٹ بٹن پر کلک کریں ، پھر Finish بٹن پر کلک کریں ۔ src فولڈر میں ہم پیکج بنائیں گے ru.javarush.ws ۔ اس پیکیج میں ہم ایک انٹرفیس بنائیں گے HelloWebService:
package ru.javarush.ws;

// это аннотации, т.е. способ отметить наши классы и методы,
// How связанные с веб-сервисной технологией
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;

// говорим, что наш интерфейс будет работать How веб-сервис
@WebService
// говорим, что веб-сервис будет использоваться для вызова методов
@SOAPBinding(style = SOAPBinding.Style.RPC)
public interface HelloWebService {
    // говорим, что этот метод можно вызывать удаленно
    @WebMethod
    public String getHelloString(String name);
}
اس کوڈ میں، کلاسز نام نہاد تشریحات ہیں WebServiceاور WebMethodہمارے انٹرفیس اور اس کے طریقہ کار کو بطور ویب سروس نشان زد کرنے کے علاوہ کچھ نہیں کرتی ہیں۔ کلاس پر بھی یہی لاگو ہوتا ہے SOAPBinding۔ فرق صرف اتنا ہے کہ SOAPBindingیہ پیرامیٹرز کے ساتھ ایک تشریح ہے۔ اس صورت میں، styleایک قدر کے ساتھ ایک پیرامیٹر استعمال کیا جاتا ہے جس سے یہ ظاہر ہوتا ہے کہ ویب سروس دستاویزی پیغامات کے ذریعے نہیں، بلکہ ایک کلاسک RPC کے طور پر کام کرے گی، یعنی ایک طریقہ کو کال کرنے کے لئے. آئیے اپنی انٹرفیس منطق کو نافذ کریں اور اپنے پیکج میں ایک کلاس بنائیں HelloWebServiceImpl۔ ویسے، میں نوٹ کرتا ہوں کہ Impl کے ساتھ کلاس ختم کرنا جاوا میں ایک کنونشن ہے، جس کے مطابق انٹرفیس کے نفاذ کو اتنا نامزد کیا گیا ہے (Impl - لفظ نفاذ سے، یعنی نفاذ)۔ یہ کوئی ضرورت نہیں ہے اور آپ کلاس کو جو چاہیں نام دینے کے لیے آزاد ہیں، لیکن اچھے اخلاق کی ضرورت ہے:
package ru.javarush.ws;

// таже annotation, что и при описании интерфейса,
import javax.jws.WebService;

// но здесь используется с параметром endpointInterface,
// указывающим полное Name класса интерфейса нашего веб-сервиса
@WebService(endpointInterface = "ru.javarush.ws.HelloWebService")
public class HelloWebServiceImpl implements HelloWebService {
    @Override
    public String getHelloString(String name) {
        // просто возвращаем приветствие
        return "Hello, " + name + "!";
    }
}
آئیے اپنی ویب سروس کو ایک آزاد سرور کے طور پر شروع کریں، یعنی بغیر کسی Tomcat اور ایپلیکیشن سرورز کی شرکت کے (یہ ایک الگ بحث کا موضوع ہے)۔ ایسا کرنے کے لیے، src فولڈر میں پروجیکٹ کے ڈھانچے میں ، ہم ایک پیکیج بنائیں گے ، اور اس میں ہم ایک طریقہ کے ساتھ ru.javarush.endpointایک کلاس بنائیں گے : HelloWebServicePublishermain
package ru.javarush.endpoint;

// класс, для запуска веб-serverа с веб-сервисами
import javax.xml.ws.Endpoint;
// класс нашего веб-сервиса
import ru.javarush.ws.HelloWebServiceImpl;

public class HelloWebServicePublisher {
    public static void main(String... args) {
        // запускаем веб-server на порту 1986
        // и по addressу, указанному в первом аргументе,
        // запускаем веб-сервис, передаваемый во втором аргументе
        Endpoint.publish("http://localhost:1986/wss/hello", new HelloWebServiceImpl());
    }
}
اب Shift+F10 دبا کر اس کلاس کو چلائیں ۔ کنسول میں کچھ بھی نظر نہیں آئے گا، لیکن سرور چل رہا ہے۔ آپ اپنے براؤزر میں http://localhost:1986/wss/hello?wsdl لائن ٹائپ کرکے اس کی تصدیق کر سکتے ہیں ۔ جو صفحہ کھلتا ہے، ایک طرف، یہ ثابت کرتا ہے کہ ہمارے پاس ایک ویب سرور (http://) ہمارے کمپیوٹر (لوکل ہوسٹ) پر پورٹ 1986 پر چل رہا ہے، اور دوسری طرف، ہماری ویب سروس کی WSDL تفصیل دکھاتا ہے۔ اگر آپ ایپلیکیشن کو روکتے ہیں، تو تفصیل دستیاب نہیں ہو جائے گی، جیسا کہ ویب سروس خود کرے گی، لہذا ہم ایسا نہیں کریں گے، بلکہ کلائنٹ کو لکھنے کی طرف بڑھیں گے۔

کلائنٹ

پروجیکٹ فولڈر src میں ہم ایک پیکیج بنائیں گے ru.javarush.client، اور اس میں ایک HelloWebServiceClientطریقہ کے ساتھ ایک کلاس main:
package ru.javarush.client;

// нужно, чтобы получить wsdl описание и через него
// дотянуться до самого веб-сервиса
import java.net.URL;
// такой эксепшн возникнет при работе с an objectом URL
import java.net.MalformedURLException;

// классы, чтобы пропарсить xml-ку c wsdl описанием
// и дотянуться до тега service в нем
import javax.xml.namespace.QName;
import javax.xml.ws.Service;

// интерфейс нашего веб-сервиса (нам больше и нужно)
import ru.javarush.ws.HelloWebService;

public class HelloWebServiceClient {
    public static void main(String[] args) throws MalformedURLException {
        // создаем ссылку на wsdl описание
        URL url = new URL("http://localhost:1986/wss/hello?wsdl");

        // Параметры следующего конструктора смотрим в самом первом теге WSDL описания - definitions
        // 1-ый аргумент смотрим в атрибуте targetNamespace
        // 2-ой аргумент смотрим в атрибуте name
        QName qname = new QName("http://ws.javarush.ru/", "HelloWebServiceImplService");

        // Теперь мы можем дотянуться до тега service в wsdl описании,
        Service service = Service.create(url, qname);
        // а далее и до вложенного в него тега port, чтобы
        // получить ссылку на удаленный от нас an object веб-сервиса
        HelloWebService hello = service.getPort(HelloWebService.class);

        // Ура! Теперь можно вызывать удаленный метод
        System.out.println(hello.getHelloString("JavaRush"));
    }
}
میں نے لسٹنگ میں کوڈ پر زیادہ سے زیادہ تبصرے دیے۔ میرے پاس شامل کرنے کے لیے کچھ نہیں ہے، تو چلیں (Shift+F10)۔ ہمیں کنسول میں متن دیکھنا چاہئے: Hello, JavaRush!اگر آپ نے اسے نہیں دیکھا، تو آپ شاید ویب سروس شروع کرنا بھول گئے ہیں۔

نتیجہ

اس موضوع نے ویب سروسز میں ایک مختصر سیر فراہم کی۔ ایک بار پھر، میں کہوں گا کہ جو کچھ میں نے لکھا ہے اس میں سے زیادہ تر میرا اندازہ ہے کہ یہ کیسے کام کرتا ہے، اور اس لیے آپ کو مجھ پر زیادہ بھروسہ نہیں کرنا چاہیے۔ اگر اہل علم میری اصلاح کریں تو میں مشکور ہوں گا کیونکہ تب میں کچھ سیکھوں گا۔ یو پی ڈی آئیے بات چیت جاری رکھیں
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION