Сокращение трафика данных в веб-сервисе JAX-WS - PullRequest
2 голосов
/ 03 мая 2011

Я выставляю пару объектов домена через веб-сервис на основе SOAP.Некоторые из моих доменных объектов имеют большое количество полей.Я не хочу включать значения в мой запрос / ответ веб-службы, если они не нужны.

Например, если у меня есть объект домена Book с полями title, genre и isbn, если я хочу использовать свой веб-сервис для обновления названия книги, я хочу, чтобы мой запрос включал только заголовокполе (без двух других полей, которые не обновляются).

Кроме того, я хочу, чтобы мои клиенты веб-службы могли указывать, какие поля они хотят вернуть при загрузке книг.

Это позволит клиентам загружать поле заголовка, тем самым уменьшая размер данных, передаваемых по сети, поскольку ненужные поля не будут включены в ответ.

Кто-нибудь знает какие-либо модели или лучшие практики для решения этого типа требований?

Ответы [ 2 ]

0 голосов
/ 03 мая 2011

Можно либо сделать поля необязательными в типе данных XSD, либо указать, что в запросе changeTitle вы не ожидаете Book, а только идентификатор и строку .

Когда вы изобретаете запрос changeAttributes и у вас есть дополнительные поля, вы должны решить, что означает пропущенное поле. Это может быть очистить это поле или оставить это поле без изменений .

0 голосов
/ 03 мая 2011

Вы затронули несколько проблем, каждая из которых заслуживает отдельного объяснения:

  • Сокращение трафика - сокращение трафика обычно означает уменьшение количества обращений, а не уменьшение полезной нагрузки.Сокращение трафика достигается за счет реализации более совершенных операций, которые выполняют несколько действий вместо предоставления операций CRUD.
  • Сокращение полезной нагрузки - если вы не хотите передавать весь объект, вам следует использовать объекты передачи данных.Специальный объект, передающий только данные, необходимые для данной операции.
  • Динамический ответ - веб-сервисы не должны этого делать.Веб-сервис имеет фиксированный интерфейс, определенный WSDL, где каждая полезная нагрузка сообщения определяется XSD.Если вы хотите динамически изменить возвращаемую структуру данных, вы нарушите это.Это не значит, что это невозможно - вы можете определить, что ваша сервисная операция возвращает xsd: any = any XML, и ваша обязанность - подготовить возвращенный XML и обязанность вашего клиента анализировать XML.
...