Использование SOAP для предоставления операций CRUD - PullRequest
2 голосов
/ 09 октября 2008

Является ли представление операций CRUD через веб-сервисы SOAP плохой идеей? Мой инстинкт подсказывает мне, что не в последнюю очередь это связано с огромными накладными расходами на выполнение вызовов базы данных. Я изо всех сил пытаюсь найти документацию для / против этого (анти) паттерна, поэтому мне было интересно, может ли кто-нибудь указать мне какую-либо документацию или иметь мнение по этому вопросу.

Кроме того, если кто-то знает о передовой практике (и / или документации на этот счет) при разработке служб мыла, это было бы замечательно.

Вот пример того, как будет выглядеть веб-сервис:

  • Создать
  • Удалить
  • Выполнить
  • Fetch
  • Обновление

А вот как будет выглядеть реализация:

[WebMethod]
public byte[] Fetch(byte[] requestData)
{
    SelectRequest request = (SelectRequest)Deserialize(requestData);

    DbManager crudManager = new DbManager();
    object result = crudManager.Select(request.ObjectType, request.Criteria);

    return Serialize(result);
}

Ответы [ 4 ]

3 голосов
/ 09 октября 2008

Если вы хотите использовать SOAP в режиме RESTful, для этого есть интересный стандарт: WS-Transfer ; который обеспечивает слабосвязанные конечные точки CRUD; из которого вы проверяете сообщение и действуете соответственно со своими сущностями.

Затем вы можете разместить все, что захотите, WS-Secure, WS-Reliable Messaging и т. Д.

2 голосов
/ 09 октября 2008

Я думаю, что публикация службы SOAP, которая предоставляет операции CRUD анонимным, публичным «пользователям», была бы особенно плохой идеей. Однако, если вы можете ограничить одно или оба из этих предупреждений, то я не вижу в этом ничего плохого (более того, я реализовывал такие службы много раз).

  • Вы можете потребовать, в дополнение к любым параметрам метода, которые вам требуются для выполнения операции, параметры имени пользователя и пароля, которые в действительности аутентифицируют отправителя до обработки запроса: об ошибке аутентификации может быть сообщено с возвратом исключение SOAP. Если вы были особенно параноиком, вы можете при желании запустить службу через SSL

  • У вас может быть серверное решение, которое имеет дело с отправкой и приемом фильтра запросов на основе IP, позволяя только запросы от списка утвержденных адресов.

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

Java (хотя и в среде IDE NetBeans) и .Net (через VS) поддерживают использование веб-служб в проектах / решениях. Самое большое преимущество этого заключается в том, что объекты / структуры удаленной службы автоматически переводятся в собственные объекты в приложение-потребитель, которое исключительно удобно.

2 голосов
/ 09 октября 2008

Если все, что вы хотите сделать, это CRUD через Интернет, я бы посмотрел на несколько различных технологий для выполнения REST вместо использования WS *. SQL Data Services (ранее Project Astoria) действительно может быть хорошей альтернативой.

0 голосов
/ 09 октября 2008

Нет ничего плохого в том, чтобы выставлять операции CRUD через SOAP-веб-сервисы как таковые.

Очевидно, вы найдете довольно много примеров таких услуг.

Однако, в зависимости от ваших конкретных требований, вы можете обнаружить, что использование SOAP слишком затратно или вам лучше использовать JSON / AJAX и т.д.

Поэтому я считаю, что, если вы не предоставите дополнительную информацию о ваших конкретных данных, нет хорошего ответа на ваш вопрос.

...