Интерфейс веб-службы - комплексный тип в качестве параметра? - PullRequest
5 голосов
/ 19 мая 2009

Просто ищите отзывы о передовых практиках в области дизайна интерфейса веб-службы.

У меня есть два варианта:

Вариант 1

public string GetSomeData(SomeCriteriaClass criteria);

где SomeCriteriaClass определяется как:

public int ID;
public string Name;
public string Property2; etc.

Вариант 2

public string GetSomeData(int id, string name, string property2)

Какой вариант предпочтительнее? Это похоже на конфликт шаблонов проектирования - 1 состоит в том, чтобы обернуть параметры в классе, а другой сохраняет интерфейс веб-службы гибким и открытым.

Второй вопрос - если мы выберем Вариант 1 - как вы вызываете это через URL?

Спасибо

Ответы [ 3 ]

2 голосов
/ 19 мая 2009

Термин «веб-сервис» часто используется для обозначения двух разных понятий.

  • Технология: использование HTTP (S) в качестве протокола для межпроцессного взаимодействия.

  • Архитектурный подход: Сервис-ориентированная архитектура.

Если мы говорим о веб-сервисе как о технологии, у вас есть много вариантов: вы можете использовать HTTP GET (это тот, который использует параметры URL) или HTTP POST (данные находятся в теле HTTP сообщение). Для HTTP POST полезная нагрузка может быть SOAP или просто любой другой компонент.

Если мы говорим о сервис-ориентированном подходе и веб-сервисах как о инструменте, то HTTP + SOAP - самый стандартный путь.

Если мы считаем метод веб-службы просто реализацией операции службы, используйте подпись ниже, которая подчеркивает этот подход:

public FooResponse FooOperation(FooRequest request);

Это означает, что у операции есть запрос и документ ответа (даже если любой из них пуст), и вы можете отделить контракт на обслуживание (какие операции вы выставляете) и договор на данные (как вы составляете запрос и ответные сообщения). Подробнее об этом см. В этой статье: Принципы проектирования сервисов Шаблоны сервисов и анти-шаблоны

Вывод:

  • Если вы не заботитесь о SOA, просто хотите вызвать метод через HTTP, тогда Вариант 2 прост и понятен.
  • Но если вы создаете сервисы SOA, используйте подпись, ориентированную на документы. Вариант 1 является смесью обоих и не рекомендуется.
2 голосов
/ 19 мая 2009

Вы можете пойти трудным путем и реализовать вариант # 1, используя SOAP. С помощью SOAP вы можете определять сложные типы данных. С другой стороны, вы можете сделать это «взломом», как в варианте №2, используя REST и просто закодировать параметры либо в URL, либо в сообщении HTTP POST.

1 голос
/ 20 мая 2009

Опция 1 публичная строка GetSomeData (критерии SomeCriteriaClass); хороший способ реализовать веб-сервис, потому что здесь вы используете SOAP и документ-ориентированный термин. И опция 2 предназначена для базовых Java-разработчиков, которые не слишком концентрируются на шаблонах проектирования.

Давайте рассмотрим сценарий - после использования опции 2, предположим, что вы хотите добавить еще 3 varibale в SomeCriteriaClass.java, то, какой путь вы выберете ... добавить еще 3 параметра в метод GetSomeData () или объявить в SomeCriteriaClass.java. 1003 *

Хороший последователь шаблона проектирования, решите объявить в SomeCriteriaClass.java не добавлять в GetSomeData ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...