Skip to content

Instantly share code, notes, and snippets.

@vchernogorov
Last active January 8, 2024 07:27
Show Gist options
  • Star 26 You must be signed in to star a gist
  • Fork 6 You must be signed in to fork a gist
  • Save vchernogorov/81da656048875132d6963304d449f770 to your computer and use it in GitHub Desktop.
Save vchernogorov/81da656048875132d6963304d449f770 to your computer and use it in GitHub Desktop.
Веб-сервисы

О веб-сервисах

  1. Web Service - программная система, предназначенная поддерживать взаимодействие между интераперабельными устройствами через сеть. Веб сервис обладает интерфейсом, описанным в WSDL формате. Другие системы, взаимодействуют с веб сервисом через SOAP-сообщения, которые обычно передаются с помощью HTTP с XML сериализацией в связке с другими веб-стандартами. [source]

    • Сервис доступен по сети, может располагаться и выполняться на разных компьютерах.
    • Передача сообщений между сервисом и клиентом происходит в независимом формате.
    • Web Service может быть создан из существующего Web приложения.
    • Сервис использует стандартизированную XML messaging систему.
    • Не привязан к операционной системе или языку программирования
  2. Пример веб сервиса: dailyinfo

Архитектурные модели

  1. SOA (Service Based Architecture) - модульный подход к разработке программного обеспечения, основанный на использовании распределённых, слабо связанных заменяемых компонентов, оснащённых стандартизированными интерфейсами для взаимодействия по стандартизированным протоколам. [source]

    • Программные комплексы, разработанные в соответствии с сервис-ориентированной архитектурой, обычно реализуются как набор веб-служб, взаимодействующих по протоколу SOAP, но существуют и другие реализации, например, на основе REST.
  2. ROA (REST-Oriented Architecture) - архитектурный стиль приложения и подход к разработке для создания ПО в виде ресурсов с RESTful интерфейсами. Эти ресурсы являются программными компонентами, которые могут быть переиспользованы для различных целей. [source]

  3. MOM (Message-Oriented Model) сосредаточена на тех аспектах архитектуры, которые относятся к сообщениям и их обработке. [source]

  4. SOM (Service-Oriented Model) сосредаточена на тех аспектах архитектуры, которые относятся к сервису и действиям. [source]

    • Главная цель SOM - устанавливать отношения между агентом, сервисом, который он реализует, и запросами.
    • SOM построен на основе MOM, но сосредочен больше на действия, чем на сообщения.
  5. ROM (Resource-Oriented Model) сосредоточена на тех аспектах архитектуры, которые относятся к ресурсам, и сервис модель которых связана с манипулированием ресурсами. [source]

  6. PM (Policy Model) сосредаточена на тех аспектах архитектуры, которые относятся к политике, расширениям, защите и качеству сервиса. [source]

  7. MM (Management Model) сосредаточена на тех аспектах архитектуры, которые относятся к регулированию веб сервисов. [source]

Стек протоколов

  1. Протокол - набор соглашений интерфейса логического уровня, которые определяют обмен данными между различными программами. [[source]][protocol]

  2. TCP/IP - семейство протоколов, предназначенных для взаимодйествия между электронными устройствами. Определяет, как они должны быть связаны через интернет и как нужно передавать данные между ними. [source]

  3. TCP (Transmission Control Protocol) - отвечает за разбиение данных на небольшие пакеты перед тем, как пересылать их по сети, и за сборку этих пакетов в исходное состояние после получения. [[source]][tcp]

  4. IP (Internet Protocol) - отвечает за обмен данными между устройствами, т.е. за адресацию, отправку и получение пакетов данных через интернет. [[source]][ip]

  5. DNS (Domain Name Server) - иерархическая система имен, построенная на распределенных базах данных. [source]

    • Когда пользователь посещает сайт, то имя сайта преобразуется в числовое представление с помощью DNS.
    • Когда регистрируется новый домен вместе с TCP/IP адресом, DNSs по всему миру фиксируют эту информацию.
  6. HTTP (HyperText Transfer Protocol) - протокол уровня приложения, используемый в основном в World Wide Web. HTTP использует клиент-серверную модель, где браузер является клиентом и общается с веб-сервером, который хостит веб-сайт. [source]

    • Обычный HTTP запрос состоит из следующих шагов:
      • Открывается соединение к HTTP серверу.
      • Запрос отправляется на сервер.
      • Выполняются вычисления на сервере.
      • Сервер посылает назад ответ.
      • Соединение закрывается.
    • Для HTTP, действие над данными задается с помощью методов (CRUD операций):
      • GET - получить.
      • PUT - добавить, заменить.
      • POST - добавить, изменить, удалить.
      • DELETE - удалить.
  7. HTTPS (HyperText Transfer Protocol Secure) - разновидность HTTP протокола, который добавляет передаваемым данным уровень безопасности через SSL протокол или TLS протокол. [source]

  8. FTP (File Transfer Protocol) - протокол, используемый для передачи или обмена файлами между компьютерами. FTP часто используется для загрузки сетевых страниц и других документов с частного устройства разработки на открытые сервера хостинга.

  9. GIOP (General Inter-ORB Protocol) - абстрактный протокол в распределённых объектных системах, обеспечивающий возможность взаимодействия сервисов-брокеров.

  10. IIOP (Inter-ORB Protocol) - является конкретной реализацией абстрактных определений GIOP.

  11. SSL (Secure Socket Layer) - стандартный протокол, используемый для защищенной передачи документов через сеть.

  12. TLS (Transport Layer Security) - улучшенная версия SSL протокола.

  13. SNMP (Simple Network Management Protocol) - используется для управления сетями.

  14. ARP (Address Resolution Protocol) - используется IP для поиска адреса параметров сетевой карты компьютера, опираясь на IP-адрес.

  15. RARP (Reverse Address Resolution Protocol) - используется IP для поиска IP-адресов, опираясь на параметры сетевой карты компьютера.

  16. PPTP (Point to Point Tunneling Protocol) - используется для установления соединения (тунеля) между приватными сетями.

  17. NTP (Network Time Protocol) - используется для синхронизации времени между компьютерами.

  18. LDAP (Lightweight Directory Access Protocol) - используется для сбора информации о пользователях и электронных почтовых адресов из интернета.

  19. ICMP (Internet Control Message Protocol) - заботится об ошибках в сети.

  20. DHCP (Dynamic Host Configuration Protocol) - используется для поиска динамических IP-адресов компьютеров в сети.

  21. BOOTP (Boot Protocol) - используется для бута (запуска) компьютеров из сети.

  22. POP (Post Office Protocol) - используется программами с почтовой функциональностью для отыскания нужной почти из почтового сервера.

  23. IMAP (Internet Message Access Protocol) - действует также, как и POP, только не загружает сразу все запрашиваемые почты, а дает возможность посмотреть на сообщения, которые выдает почтовый сервер, или удалить их из базы.

  24. SMTP (Simple Mail Transfer Protocol) - заботится об отправки сообщений в почту. Обычно сообщения посылаются на почтовый сервер, а затем в другие серверы и только потом в пункт назначения. Может передавать только текстовые данные.

  25. MIME (Multi-purpose Internet Mail Extensions) - выполняет такие же функции, что и SMTP, только может еще передавать в сообщениях двоичные данные, т.е. аудио, видео, картинки, что угодно.

Технологии

  1. SOAP (Simple Object Access Protocol) - основанный на XML протокол обмена сообщениями.

  2. WSDL (Web Services Description Language) - язык разметки, основанный на XML, преднзначенный для описания веб сервисов.

  3. UDDI (Universal Description, Discovery, and Integration) - предоставляет всемирный реестр веб сервисов для рекламы, поиска и хранения.

  4. Взаимодействие между SOAP, WSDL и UDDI:

    • Приложение играет роль веб сервисов, которые нужны клиенту для доступа к другому приложению или бизнес логике, расположенной где-то в сети.
    • Клиент делает запрос в UDDI реестр для нахождения сервиса по имени, категории, идентификатору или какой-то другой спецификации.
    • Как только сервис найден, клиент получает информацию о местонахождении WSDL документа из UDDI реестра.
    • WSDL документ содержит информацию о том, как обратиться к веб сервису, и формат запросов в XML схему.
    • Клиент создает SOAP сообщение в соответствии с XML схемой, взятой из WSDL, и посылает запрос хосту (где находится веб сервис).

1. SOM

  1. SOM (Service-Oriented Model) сосредаточена на тех аспектах архитектуры, которые относятся к сервису и действиям. [source]

    • Главная цель SOM - устанавливать отношения между агентом, сервисом, который он реализует, и запросами.
    • SOM построен на основе MOM, но сосредочен больше на действия, чем на сообщения.
  2. Message - единица информации, отсылаемая одним агентом другому в конексте веб сервисов. [source]

  3. Action - любое действие, представленное агентом в качестве отклика на получение сообщения, или посылки сообщения, или другого изменения состояния. [source]

  4. Service - набор действий, которые формируют целостную систему с точки зрения провайдеров и реквесторов. [source]

  5. Agent - программа, выполняющая функции, указанные пользователем, сущностью или процессом. [source]

    • Агент представляет программу, выполняющую функции согласно действиям пользователя, сущности или процесса.
    • Агент обладает идентификатором, владельцем (сущностью) и может предоставлять 1 и более сервисов или запрашивать 0 и более сервисов.
  6. Choreography - определяет очередность и условия, которые позволяют объеденению независимых веб сервисов обмениваться информацией с целью достичь некоторую полезную функцию. [source]

  7. Choreography Description Language - нотация для описания хореографии. [source]

  8. Service Description - набор документов, описывающих интерфейс и семантику сервиса. [source]

    • Описание выражается через XML и обуславливается одним или более стандартами.
  9. Service Operation - абстрактная группировка сообщений, которую сервис посылает и получает, чтобы совершить определенную задачу. [source]

  10. Service Platform - среда, используемая для хостинга одного или более веб сервисов. [[source]][service-platform]

    • Она включает в себя один или более SOAP серверов, ни одного или несколько UDDI реестров, защиту и транзакционные сервисы, используемые веб сервисами, которые хостятся на ней, и прочую инфраструктуру.
  11. Service Provider - агент, который способен и предназначен для совершения действий, связанных с сервисом. [source]

    • Провайдер предоставляет 1 или более сервисов.
    • Провайдер представляет или вызывает представление действий, связанных с сервисом.
  12. Service Requester - сущность, которая отвечает за запросы к сервису через провайдер. [source]

    • Реквестор запрашивает 1 или более сервисов.
  13. Service Registry (Broker) - логически-централизованная директория сервисов, куда девелоперы публикуют новые сервисы и где можно найти существующие. Поэтому этот элемент является координационным центром для компаний и их услуг. [[source]][service-registry]

    • Реестр предоставляет следующего вида информацию: бизнес данные, такие как имя, описание, контактная информация, или данные, необходимые для использования веб сервиса.
  14. Service Semantics - контракт между провайдером и реквестором, который отображает вызов сервиса. [source]

    • Семантика является обобщением таксов, которые составляют сервис.
    • Семантика может выражаться с помощью языка описания сервиса.
  15. Service Task - еденица активности, связанная с сервисом. [source]


2. ROM

  1. ROM (Resource-Oriented Model) сосредоточена на тех аспектах архитектуры, которые относятся к ресурсам, и сервис модель которых связана с манипулированием ресурсами. [source]

3. SOAP

  1. SOAP - протокол обмена структурированными сообщениями в распределенной вычислительной среде. Также предоставляет стандарт структуры упаковки данных для транспортировки XML документов с помощью различных интернет-технологий, как: SMTP, HTTP, FTP. [source]

    • Так как SOAP обладает стандартным механизмом транспортировки, различные клиенты и серверы могут взаимодействовать, например, с EJB через .NET клиент и наоборот.
  2. Пример взаимодействия клиента с Web приложением (регистрация аккаунта):

    • Программа на клиентской стороне конвертирует информацию о регистрации аккаунта в SOAP сообщение.
    • SOAP сообщение отсылается в веб сервис, как тело HTTP POST запроса.
    • Веб сервис распаковывает SOAP реквест и конвертирует в комманду, которую понимает приложение на сервере.
    • Приложение обрабатывает информацию своей логикой и отправляет ответ с новым уникальным номером аккаунта.
    • Следующим шагом, веб сервис конвертирует ответ сервера в SOAP сообщение, которое отправляет назад в клиентское приложение, как ответ на HTTP запрос.
    • Клиентское приложение распаковывает SOAP сообщение и предоставляет клиенту соотвествующую информацию.
  3. Клиент/сервер связь:

                   HTTP POST of SOAP request document
      SOAP: client ----------------------------------> service
    
            client <---------------------------------- service
                        SOAP (maybe JSON) document
    
  4. SOAP Building Blocks. SOAP сообщение - это обычный XML документ, содержащий следующие элементы:

    • Оболочка - идентифицирует XML документ как SOAP сообщение.
    • Заголовок - содержит различного рода информацию о сообщении, которая помещается обычно в заголовки.
    • Тело - содержит информацию о вызове и ответе.
    • Ошибка - содержит все ошибки и текущий статус.

4. WSDL

  1. WSDL (Web Service Description Language) - XML технология, которая описывает интерфейс веб сервиса в стандартизированном виде. WSDL указывает стандарт, как веб сервис должен представлять входные и выходные параметры при вызове извне, как должна выглядеть структура функции, природа вызова и как осуществлять связывание протокола сервера. [source]

    • WSDL позволяет различным клиентам автоматически распознавать, как взаимодействовать с веб сервисом.
  2. WSDL документ - описывает веб сервис. Он указывает местоположение сервиса и его методы, используя следующие элементы:

    • <types> - определяет типы данных, используемые веб сервисом.
    • <message> - определяет элементы данных для каждой операции.
    • <portType> - описывает операции и сообщение, которые могут встретиться в сервисе.
    • <binding> - определяет протокол и формат данных для каждого типа порта.
    • <service> - определяет адрес веб сервиса.
    • <definition> - корневой элемент каждого WSDL документа.
    • <operation> - абстрактное определение операции для сообщения.
    • <documentation> - предоставляет документацию
    • <import> - импортирует сторонние WSDL документы или XML Schemas.
  3. Структура WSDL документа выглядит следующим образом:

    <definitions>
        <types>
          data type definitions........
        </types>
        <message>
          definition of the data being communicated....
        </message>
        <portType>
          set of operations......
        </portType>
        <binding>
          protocol and data format specification....
        </binding>
    </definitions> 
  4. <portType> - элемент, который определяет веб сервис, операции, приводимые в нем, и задействованные сообщения.

    • request-response - самый распространенный тип операции. Она получает запрос и возвращает ответ.
    • one-way - операция может получать сообщения, но не будет возвращать ответ.
    • solicit-response - операция может отправлять запрос и будет ждать ответа.
    • notification - операция может посылать сообщений, но не будет ждать ответа.
  5. Пример Request-Response операции (словарь терминов):

     <message name="getTermRequest">
       <part name="term" type="xs:string"/>
     </message>
     <message name="getTermResponse">
       <part name="value" type="xs:string"/>
     </message>
     <portType name="glossaryTerms">
       <operation name="getTerm">
         <input message="getTermRequest"/>
         <output message="getTermResponse"/>
       </operation>
     </portType> 
    • <portType> определяет "glossaryTerms" как имя порта, а getTerm - имя операции
    • <message> элементы определяют <part> сообщений "getTermRequest" и "getTermResponse".
  6. Пример One-Way операции (словарь терминов):

     <message name="newTermValues">
       <part name="term" type="xs:string"/>
       <part name="value" type="xs:string"/>
     </message>
     <portType name="glossaryTerms">
       <operation name="setTerm">
         <input name="newTerm" message="newTermValues"/>
       </operation>
     </portType > 
    • В этом примере "glossaryTerms" определяет one-way операцию "setTerm".
    • "setTerm" операция позволяет вводить новое сообщение используя "newTermValues".
  7. Пример WSDL файла:

    <?xml version="1.0" encoding="UTF-8"?>
    <definitions name="HelloService"
                 targetNamespace="http://www.ecerami.com/wsdl/HelloService.wsdl"
                 xmlns="http://schemas.xmlsoap.org/wsdl/"
                 xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
                 xmlns:tns="http://www.ecerami.com/wsdl/HelloService.wsdl"
                 xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <types>
            <xsd:schema>
                <xsd:import
                        schemaLocation="http://localhost:9876/ts?xsd=1"
                        namespace="http://ts.ch02/">
                </xsd:import>
            </xsd:schema>
        </types>
        <message name="SayHelloRequest">
            <part name="firstName" type="xsd:string"/>
        </message>
        <message name="SayHelloResponse">
            <part name="greeting" type="xsd:string"/>
        </message>
        <portType name="Hello_PortType">
            <operation name="sayHello">
                <input message="tns:SayHelloRequest"/>
                <output message="tns:SayHelloResponse"/>
            </operation>
        </portType>
        <binding name="Hello_Binding" type="tns:Hello_PortType">
            <soap:binding style="rpc"
                          transport="http://schemas.xmlsoap.org/soap/http"/>
            <operation name="sayHello">
                <soap:operation soapAction="sayHello"/>
                <input>
                <soap:body
                        encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
                        namespace="urn:examples:helloservice"
                        use="encoded"/>
                </input>
                <output>
                    <soap:body
                            encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
                            namespace="urn:examples:helloservice"
                            use="encoded"/>
                </output>
            </operation>
        </binding>
        <service name="Hello_Service">
            <documentation>WSDL File for HelloService</documentation>
            <port binding="tns:Hello_Binding" name="Hello_Port">
                <soap:address
                        location="http://localhost:8080/soap/rpcrouter"/>
            </port>
        </service>
    </definitions>
    • <service>: HelloService.
    • <types>: Использование импортированной по локальному адресу XML Schema.
    • <message>: "sayHelloRequest": "firstName" параметр, "sayHelloResponse": "greeting" возвращаемое значение
    • <portType>: sayHello операция, которая состоит из request-response сервиса.
    • <binding>: Указание использовать SOAP HTTP протокол.
    • <service>: сервис доступен по ссылке http://www.examples.com/SayHello/.
    • <port>: Связывает <binding> с URI http://www.examples.com/SayHello/, по которой доступен данный сервис.

5. UDDI

  1. UDDI (Universal Description, Discovery, and Integration) - предоставляет всемирный реестр веб сервисов для рекламы, поиска и хранения. [source]
    • UDDI предоставляет структуру для представления деловых отношений, веб сервисов, технических метаданных и точек доступа к веб сервисам.

6. REST

  1. REST (REpresentational State Transfer) - это стиль архитектуры программного обеспечения для распределенных систем, использующий веб протоколы и веб технологии. REST архитектура включает в себя клиентское и серверное взаимодействие, построенное вокруг передачи ресурсов. [source]

    • Самая большая реализация REST - World Wide Web, которая, как правило, используется для построения веб-служб.
    • Системы, которые построены согласно REST принципам, называются RESTful.
    • REST может быть использован для сбора данных вебсайта через XML файлы веб страницы.
    • Пользователи могут обращаться к веб страницам через URL сайта, взаимодействовать с XML файлами через браузер и использовать данные как угодно.
    • Базовые REST принципы:
      • Client и Server - клиент и сервер должны быть отделены от REST операций через специальный интерфейс, который улучшает переносимость кода.
      • Stateless - каждый клиентский запрос должен содержать все требуемые данные для обработки запроса без хранения клиентского окружения на сервере.
      • Cacheable - ответы могут быть закэшированны на клиентском компьютере, чтобы ускорить веб поиск.
      • Layered System - позволяет клиентам подключаться к серверу через вспомогательный уровень для улучшения расширяемости.
  2. Клиент/сервер связь:

                      HTTP GET, POST, PUT, or DELETE
      REST: client ----------------------------------> service
    
            client <---------------------------------- service
                     XML, JSON, plaintext,... document
    

Веб-сервисы в Java

  1. Servlet API является основой для всех остальных технологий Java, касающихся Web и дает возможность динамически генерировать любой web-контент, используя любые библиотеки, доступные для java.

  2. JSP (JavaServer Pages) - технология, используемая для разработки интерактивных веб страниц. JSP была разработана Sun Microsystems и является улучшенной версией Java сервлетов. [source]

    • Как и большинство серверных технологий, JSP отделяет бизнес логику от представления.
    • JSP являются обычные HTML страницы с встроенным Java кодом.
    • Чтобы обработать JSP файл, разработчику нужен JSP движок, который подключен к веб серверу.
    • JSP страница компилируется в сервлет, который управляет сервлет движком (этот этап называется "преобразованием"). Сервлет движок затем загружает класс сервлета и реализовывает его, чтобы создать динамический HTML, который затем посылается в браузер. Такой процесс запускается каждый раз, когда запрашивается очередная страница.
    • Если вместе с JSP исользовать JDBC, то можно сделать динамические, связанные с базой данных, вебсайты.
  3. Apache Tomcat - опенсорсный веб сервер, разработанный Apache Software Foundation. Он позволяет реализовывать Java сервлеты и JSPs для поддержки эффективных Java-серверных сред. [source]

    • Пользователь также может получить доступ к конфигурациям и использовать XML для настройки проектов.
    • Tomcat может предоставить рантайм оболочку для Java сервлетов.
    • Ключевой элемент Java-based веб сервера - сервлет контейнер, поэтому JSP скрипты и им подобные автоматически преобразовываются в сервлет.
    • Catalina — контейнер сервлетов Tomcat’а, который реализует спецификацию сервлетов.
  4. Apache Ant - Java-based опенсорсный build tool, разработанный Apache Software Foundation. Он схож с "make" утилитой, но в большинстве своем функционирует только на java платформе. [source]

    • В отличии от Make, Ant написан на XML, поэтому портируемость и простота - это два главных преимущества Ant.
  5. RPC (Remote Procedure Call) - класс технологий, позволяющих компьютерным программам вызывать функции или процедуры в другом адресном пространстве (как правило, на удаленных компьютерах). [source]

    • RPC работает по принципу: отправитель или клиент создает запрос с помощью процедуры, функции или вызова метода в удаленный сервер, который RPC обрабатывает и посылает. Когда удаленный сервер получает запрос, он отсылает ответ назад клиенту, и приложение продолжает свою работу. Перед тем, как продолжать работу программы, клиент ждет, пока сервер завершит процесс обработки.
    • В общем, RPC приложения используют модули, называемые прокси и заглушки, которые заставляют их выглядеть как простые локальные вызовы процедур.
    • RPC-ориентированное приложение - приложение, в которых существует интерактивная связь между удалёнными компонентами с небольшим временем ответов и относительно малым количеством передаваемых данных.
    • Пример RPC можно найти в GWT.
  6. RMI (Remote Method Invocation) - программный интерфейс вызова удаленных методов в языке Java. [source]

    • Он представляет объектно-ориентированный эквивалент RPC.
    • RMI функциональность находится в java.rmi пакете и предоставляет распределенную объектную модель, специфицирующую, каким образом производится вызов удаленных методов, работающих на другой виртуальной машине Java.
    • При доступе к объектам на другом компьютере возможно вызывать методы этого объекта. Необходимо только передать параметры метода на другой компьютер, сообщить объекту о необходимости выполнения метода, а затем получить обратно возвращаемое значение.
  7. RSS (Really Simple Syndication)

  8. RDF (Resource Description Framework)

@ggrachdev
Copy link

Благодарю!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment