JavaRush /جاوا بلاگ /Random-SD /ويب خدمتون. قدم 1. ويب سروس ڇا آهي ۽ ان سان ڪيئن ڪم ڪجي؟
eGarmin
سطح

ويب خدمتون. قدم 1. ويب سروس ڇا آهي ۽ ان سان ڪيئن ڪم ڪجي؟

گروپ ۾ شايع ٿيل
موضوع جو عنوان واقعي هڪ سوال آهي، ڇاڪاڻ ته ... مان پاڻ کي خبر ناهي ته اهو ڇا آهي ۽ پهريون ڀيرو آئون هن آرٽيڪل جي فريم ورڪ ۾ ان سان ڪم ڪرڻ جي ڪوشش ڪندس. مان صرف ان ڳالهه جي ضمانت ڏئي سگهان ٿو ته هيٺ ڏنل ڪوڊ ڪم ڪندو، پر منهنجا جملا صرف مفروضا ۽ اندازا هوندا ته مان پاڻ کي ڪيئن سمجهان ٿو. سو، اچو ته هلون... ويب خدمتون.  قدم 1. ويب سروس ڇا آهي ۽ ان سان ڪيئن ڪم ڪجي؟  - 1

تعارف

اسان کي شروع ڪرڻ جي ضرورت آهي ڇو ته ويب خدمتن جو تصور پيدا ڪيو ويو. جڏهن دنيا ۾ اهو تصور ظاهر ٿيو، ٽيڪنالاجيون اڳ ۾ ئي موجود هيون جيڪي ايپليڪيشنن کي هڪ فاصلي تي رابطو ڪرڻ جي اجازت ڏين ٿيون، جتي هڪ پروگرام ٻئي پروگرام ۾ ڪجهه طريقي سان ڪال ڪري سگهي ٿو، جيڪو ڪنهن ٻئي شهر يا ملڪ ۾ واقع ڪمپيوٽر تي شروع ڪري سگهجي ٿو. اهو سڀ ڪجهه RPC (ريموٽ پروسيجر ڪالنگ) جي طور تي مختصر ڪيو ويو آهي. مثالن ۾ شامل آهن CORBA ٽيڪنالاجيون، ۽ جاوا لاءِ - RMI (Remote Method Invoking). ۽ انهن ۾ سڀ ڪجهه سٺو لڳي ٿو، خاص طور تي CORBA ۾، ڇاڪاڻ ته ... توهان ان سان گڏ ڪنهن به پروگرامنگ ٻولي ۾ ڪم ڪري سگهو ٿا، پر ڪجهه اڃا تائين غائب هو. مان سمجهان ٿو ته CORBA جو نقصان اهو آهي ته اهو سادي HTTP جي بدران ڪجهه پنهنجي نيٽ ورڪ پروٽوڪول ذريعي ڪم ڪري ٿو، جيڪو ڪنهن به فائر وال ذريعي فٽ ٿيندو. ويب سروس جو خيال هڪ آر پي سي ٺاهڻ هو جيڪو HTTP پيڪٽس ۾ داخل ڪيو ويندو. اهڙيء طرح معيار جي ترقي شروع ٿي. هن معيار جا بنيادي تصور ڇا آهن:
  1. صابڻ . هڪ ريموٽ طريقيڪار کي ڪال ڪرڻ کان اڳ، توهان کي هن ڪال کي SOAP فارميٽ ۾ XML فائل ۾ بيان ڪرڻ جي ضرورت آهي. SOAP صرف ڪيترن ئي XML مارڪ اپ مان هڪ آهي جيڪي ويب خدمتن ۾ استعمال ڪيا ويا آهن. هر شيءِ جيڪا اسان ڪنهن هنڌ HTTP ذريعي موڪلڻ چاهيون ٿا اها پهرين هڪ XML SOAP وضاحت ۾ تبديل ڪئي ويندي آهي، پوءِ هڪ HTTP پيڪٽ ۾ ڀريو ويندو آهي ۽ نيٽ ورڪ تي ٻئي ڪمپيوٽر ڏانهن TCP/IP ذريعي موڪليو ويندو آهي.
  2. WSDL . هتي هڪ ويب سروس آهي، يعني. هڪ پروگرام جنهن جي طريقن remotely سڏيو ڪري سگهجي ٿو. پر معيار جي ضرورت آهي ته هي پروگرام هڪ وضاحت سان گڏ هجي جنهن ۾ چيو ويو آهي ته "ها، توهان صحيح آهيو - هي واقعي هڪ ويب سروس آهي ۽ توهان ان مان اهڙي ۽ اهڙن طريقن کي سڏي سگهو ٿا." هي وضاحت هڪ ٻي 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۽ ويب سروس کي سڌو سنئون سرور جي طور تي لانچ ڪريو، يا ان کي ھڪڙي سرور تي ترتيب ڏيو جيئن Tomcat يا ٻيو ڪو. ٻي صورت ۾، اسان پاڻ نه ڪو نئون سرور لانچ ڪريون ٿا ۽ نه وري ڪمپيوٽر تي ٻيو پورٽ کوليون ٿا، پر رڳو Tomcat servlet ڪنٽينر کي ٻڌايون ٿا ته ”اسان هتي ويب سروس جا ڪلاس لکيا آهن، مهرباني ڪري انهن کي شايع ڪريو ته جيئن هر ڪو توهان سان رابطو ڪري سگهي. اسان جي ويب سروس استعمال ڪريو. ويب سروس شروع ڪرڻ جي طريقي جي بغير، اسان وٽ ساڳيو ڪلائنٽ هوندو.

سرور

اچو ته IDEA شروع ڪريون ۽ هڪ نئون پروجيڪٽ ٺاهيو Create New Project . HelloWebService جو نالو بيان ڪريو ۽ اڳيان بٽڻ تي ڪلڪ ڪريو ، پوء ختم ڪريو بٽڻ . 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 تي هلندڙ آهي (localhost)، ۽، ٻئي طرف، ڏيکاري ٿو اسان جي ويب سروس جي 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