Собеседование по Java EE — Web services (вопросы и ответы)
Список вопросов и ответов по теме «Веб-сервисы» в Java (Java web services).
к списку вопросов раздела JEE
Вопросы
1. Что такое веб сервисы?
2. В чем разница между SOA и web service?
3. Что такое SOAP?
4. Что такое REST?
5. В чем разница между REST и SOAP веб сервисами?
6. Как бы вы решили какой из REST или SOAP веб сервисов использовать?
7. Объясните понятие WSDL.
8. Что такое JAX-WS?
9. Расскажите о JAXB.
10. Можем ли мы посылать soap сообщения с вложением?
11. Что такое MTOM?
12. Что такое XOP?
13. Объясните элемент SOAP envelope.
14. Как определяется пространство имен SOAP?
15. Что вы знаете о кодировании в SOAP (encoding)?
16. Что определяет атрибут encodingStyle в SOAP?
17. Какие два конечных типа веб сервисов используют JAX-WS?
18. Какие существуют правила для кодирования записи header?
19. Что вы знаете об инструменте wsimport?
20. Что вы знаете об инструменте wsgen?
21. Какие вы можете выделить различия между SOAP и другими техниками удаленного доступа?
22. Что такое resource в REST?
23. Какие HTTP методы поддерживаются в REST?
24. Когда можно использовать GET запрос вместо POST для создания ресурса?
25. Какая разница между GET и POST запросами?
26. Что означает WADL?
27. Какие вы знаете фреймворки, которые реализуют REST веб сервисы?
28. Какая разница между AJAX и REST?
29. Что делает аннотация @Path?
30. Что делает аннотация @PathParam?
31. Что делает аннотация @QueryParam?
32. Что делает аннотация @MatrixParam?
33. Что делает аннотация @FormParam?
34. Какие два способа получения заголовка HTTP запроса в JAX-RS вы знаете?
35. Как скачать файл с помощью JAX-RS?
Ответы
1. Что такое веб сервисы?
Веб-служба, веб-сервис (англ. web service) — идентифицируемая веб-адресом программная система со стандартизированными интерфейсами. Веб-службы могут взаимодействовать друг с другом и со сторонними приложениями посредством сообщений, основанных на определённых протоколах (SOAP, XML-RPC, REST и т. д.). Веб-служба является единицей модульности при использовании сервис-ориентированной архитектуры приложения. К характеристикам веб сервисов относят:
- Функциональная совместимость
- Расширяемость
- Возможность машинной обработки описания
2. В чем разница между SOA и web service?
Сервис-ориентированная архитектура (SOA, service-oriented architecture) — модульный подход к разработке программного обеспечения, основанный на использовании распределённых, слабо связанных (англ. loose coupling) заменяемых компонентов, оснащённых стандартизированными интерфейсами для взаимодействия по стандартизированным протоколам. Программные комплексы, разработанные в соответствии с сервис-ориентированной архитектурой, обычно реализуются как набор веб-служб, взаимодействующих по протоколу SOAP, но существуют и другие реализации (например, на базе jini, CORBA, на основе REST). Веб сервисы реализующие эту концепцию используют XML, JSON и др., а так же интернет протоколы вроде HTTP(S), SMTP и др..
3. Что такое SOAP?
SOAP (от англ. Simple Object Access Protocol — простой протокол доступа к объектам; вплоть до спецификации 1.2) — протокол обмена структурированными сообщениями в распределённой вычислительной среде. Первоначально SOAP предназначался в основном для реализации удалённого вызова процедур (RPC). Сейчас протокол используется для обмена произвольными сообщениями в формате XML, а не только для вызова процедур. Официальная спецификация последней версии 1.2 протокола никак не расшифровывает название SOAP. SOAP является расширением протокола XML-RPC.
SOAP может использоваться с любым протоколом прикладного уровня: SMTP, FTP, HTTP, HTTPS и др. Однако его взаимодействие с каждым из этих протоколов имеет свои особенности, которые должны быть определены отдельно. Чаще всего SOAP используется поверх HTTP.
4. Что такое REST?
REST (сокр. от англ. Representational State Transfer — «передача состояния представления») — архитектурный стиль взаимодействия компонентов распределённого приложения в сети. REST представляет собой согласованный набор ограничений, учитываемых при проектировании распределённой гипермедиа-системы. В определённых случаях (интернет-магазины, поисковые системы, прочие системы, основанные на данных) это приводит к повышению производительности и упрощению архитектуры. В широком смысле компоненты в REST взаимодействуют наподобие взаимодействия клиентов и серверов во Всемирной паутине. REST является альтернативой RPC.
В сети Интернет вызов удалённой процедуры может представлять собой обычный HTTP-запрос (обычно GET или POST; такой запрос называют REST-запрос), а необходимые данные передаются в качестве параметров запроса. Для веб-сервисов, построенных с учётом REST, то есть не нарушающих накладываемых им ограничений, применяют термин «RESTful».
5. В чем разница между REST и SOAP веб сервисами?
- REST поддерживает различные форматы: text, JSON, XML; SOAP — только XML,
- REST работает только по HTTP(S), а SOAP может работать с различными протоколами,
- REST может работать с ресурсами. Каждый URL это представление какого-либо ресурса. SOAP работает с операциями, которые реализуют какую-либо бизнес логику с помощью нескольких интерфейсов,
- SOAP на основе чтения не может быть помещена в кэш, а REST в этом случае может быть закэширован,
- SOAP поддерживает SSL и WS-security, в то время как REST — только SSL,
- SOAP поддерживает ACID (Atomicity, Consistency, Isolation, Durability). REST поддерживает транзакции, но ни один из ACID не совместим с двух фазовым коммитом.
REST vs SOAP. Часть 1. Почувствуйте разницу: https://habrahabr.ru/post/131343/
6. Как бы вы решили какой из REST или SOAP веб сервисов использовать?
REST против SOAP можно перефразировать как «Простота против Стандарта». В случае REST (простота) у вас будет скорость, расширяемость и поддержка многих форматов. В случае с SOAP у вас будет больше возможностей по безопасности (WS-security) и транзакционная безопасность (ACID).
7. Объясните понятие WSDL.
WSDL (англ. Web Services Description Language) — язык описания веб-сервисов и доступа к ним, основанный на языке XML.
Каждый документ WSDL 1.1 можно разбить на следующие логические части:
- определение типов данных (types) — определение вида отправляемых и получаемых сервисом XML-сообщений
- элементы данных (message) — сообщения, используемые web-сервисом
- абстрактные операции (portType) — список операций, которые могут быть выполнены с сообщениями
- связывание сервисов (binding) — способ, которым сообщение будет доставлено
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<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> |
8. Что такое JAX-WS?
Java API for XML Web Services (JAX-WS) — это прикладной программный интерфейс языка Java для создания веб-служб, являющийся частью платформы Java EE. JAX-WS является заменой технологии JAX-RPC, предоставляя более документо-ориентированную модель сообщений и упрощая разработку[1] веб-служб за счёт использования аннотаций, впервые появившихся в Java SE 5. Технология JAX-WS является стандартом и описана в JSR 224. Некоторые преимущества:
- Использование аннотаций устраняет необходимость создания дескрипторов веб-служб.
- Декларация конечных точек (endpoints) происходит непосредственно в классах Java.
- Прямая интеграция с JAXB 2.0.
- Внедрение ресурсов (Resource injection).
- Поддержка MTOM.
- Возможность выбора между двумя путями разработки: снизу-вверх (программист разрабатывает endpoint-классы сам) и сверху-вниз (Java классы генерируются по WSDL).
9. Расскажите о JAXB.
Java Architecture for XML Binding (JAXB) позволяет Java разработчикам ставить в соответствие Java классы и XML представления. JAXB предоставляет две основные возможности: сериализация Java объектов в XML и наоборот, то есть десериализация из XML обратно в Java объект. Другими словами, JAXB позволяет хранить и извлекать данные в памяти в любом XML-формате, без необходимости выполнения определенного набора процедур загрузки и сохранения XML. Он похож на xsd.exe и XmlSerializer в .NET Framework.
JAXB особенно полезен, когда спецификация является сложной и меняющейся. В этом случае, постоянные изменения схемы XML определений для синхронизации их с определениями Java могут занять много времени и быть подвержены ошибкам.
10. Можем ли мы посылать soap сообщения с вложением?
Да, это возможно. Можно посылать вложением различные форматы: PDF, изображения или другие двоичные данные. Сообщения SOAP работают вместе с расширением MIME, в котором предусмотрено multipart/related:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
MIME-Version: 1.0 Content-Type: Multipart/Related; boundary=MIME_boundary; type=text/xml; start="<claim061400a.xml@ javastudy.ru>" Content-Description: This is the optional message description. <?xml version='1.0' ?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> .. <theSignedForm href="cid:claim061400a.tiff@javastudy.ru"/> .. </SOAP-ENV:Body> </SOAP-ENV:Envelope> --MIME_boundary Content-Type: image/tiff Content-Transfer-Encoding: binary Content-ID: <claim061400a.tiff@javastudy.ru> ...binary TIFF image... --MIME_boundary— |
11. Что такое MTOM?
MTOM (Message Transmission Optimization Mechanism) — использование кодирования сообщений с помощью механизма оптимизации передачи сообщений. Это механизм передачи больших вложений в двоичном формате с сообщениями протокола SOAP как необработанных байтов, допустимых для меньших сообщений.
12. Что такое XOP?
XOP (XML-binary Optimized Packaging) — механизм, рекомендованный W3C для встраивания двоичных данных в набор информационных элементов XML (XML Information Set).
13. Объясните элемент SOAP envelope.
Элемент SOAP envelope является корневым элементом SOAP сообщения и определяет XML документ как SOAP сообщение.
1 2 3 4 5 6 7 8 |
<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> ... Message information ... </soap:Envelope> |
14. Как определяется пространство имен SOAP?
1 |
xmlns:soap=http://www.w3.org/2001/12/soap-envelope |
15. Что вы знаете о кодировании в SOAP (encoding)?
Кодирование SOAP представляет собой метод для структурирования запроса, который предлагается в рамках спецификации SOAP, известный как SOAP-сериализация.
16. Что определяет атрибут encodingStyle в SOAP?
SOAP encodingStyle определяет правила сериализации, используемые в сообщении SOAP. Этот атрибут может появиться на любом элементе, и область видимости этого атрибута будет распространяться на все дочерние элементы, даже на те, которые не имеют явно этого атрибута. Для сообщений SOAP по умолчанию кодирование не определено.
1 |
SOAP-ENV:encodingStyle="http://www.w3.org/2001/12/soap-encoding" |
17. Какие два конечных типа веб сервисов используют JAX-WS?
- RPC (remote procedure call) style web service в JAX-WS;
- document style web service в JAX-WS.
18. Какие существуют правила для кодирования записи header?
- заголовок должен быть идентифицирован с помощью полного имени, которое содержит пространство имен URI и локальное имя. Все непосредственные дочерние элементы SOAP заголовка должны быть заданы в пространстве имен,
- атрибут SOAP encodingStyle должен использоваться для указания стиля кодирования заголовка,
- атрибут SOAP mustUnderstand и атрибут SOAP actor должны использоваться для указания того, как обрабатывать запись и кем.
19. Что вы знаете об инструменте wsimport?
Инструмент wsimport используется для синтаксического анализа существующих Web Services Description Language (WSDL-файл) и генерации необходимых файлов (JAX-WS портируемые артефакты) для клиента веб-сервиса для доступа к опубликованному веб-сервису.
20. Что вы знаете об инструменте wsgen?
Инструмент wsgen используется для анализа существующего класса реализации веб-службы и создает необходимые файлы (JAX-WS портируемые артефакты) для развертывания веб-служб.
21. Какие вы можете выделить различия между SOAP и другими техниками удаленного доступа?
- SOAP проще в использовании, т.к. он не симметричный вроде DCOM или COBRA,
- SOAP является более независимым от платформы и языка в отличие от DCOM или CORBA,
- SOAP использует HTTP в качестве транспортного протокола и данные сохраняются в формате XML, который может быть прочтен человеком, тогда как DCOM или CORBA имеют свои собственные бинарные форматы, которые используются для транспортировки данных сложным образом.
- SOAP идентифицирует объект, отличный от конечного URL. Объекты SOAP являются независимыми и их сложно поддерживать. В случае других методов удаленного доступа работа в этом случае может быть проще.
22. Что такое resource в REST?
Это уникальный URL с представлением объекта, который может быть получен с помощью запросов GET и изменен с помощью PUT, POST, DELETE.
23. Какие HTTP методы поддерживаются в REST?
- GET;
- POST;
- PUT;
- DELETE;
- OPTIONS;
- HEAD.
24. Когда можно использовать GET запрос вместо POST для создания ресурса?
Невозможно использовать GET запрос для изменения (создания) ресурса.
25. Какая разница между GET и POST запросами?
GET передает данные серверу используя URL, когда POST передает данные, используя тело HTTP запроса.
Длина URL’а ограничена 1024 символами, это и будет верхним ограничением для данных, которые можно отослать GET’ом.
POST может отправлять гораздо большие объемы данных. Лимит устанавливается веб-сервером и обычно равен около 2MB.
Передача данных методом POST более безопасна, чем методом GET, так как секретные данные (например пароль) не отображаются напрямую в web-клиенте пользователя (в отличии от URL, который виден почти всегда).
26. Что означает WADL?
Web Application Description Language (WADL) — машинно-читаемое XML-описание для web-приложений HTTP (как правило, веб-сервисы REST). Аналог WSDL для SOAP.
WADL моделирует ресурсы, предоставляемые сервисом, и взаимосвязи между ними. WADL был предложен как стандарт W3C компанией Sun Microsystems в августе 2009, но консорциум не имеет никаких планов насчёт него и WADL ещё не получил широкого применения.
27. Какие вы знаете фреймворки, которые реализуют REST веб сервисы?
Их много, вот некоторые из них: Jersey, Restlet, EasyRest.
28. Какая разница между AJAX и REST?
- В AJAX запрос посылается к серверу с помощью объектов XMLHttpRequest. В REST используется структура URL и использование ресурсов вращается вокруг шаблона запрос\ответ.
- AJAX асинхронно исключает взаимодействие между клиентом и сервером, в то время как REST требует взаимодействия между клиентом и сервером.
- AJAX технология «set«. REST — предоставляет методы для пользователей для запроса данных или информации от сервера.
29. Что делает аннотация @Path?
Аннотация @Path связывает URI шаблон с Java методом.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.core.Response; @Path("/persons") public class PersonRestService { @GET public Response getPerson() { return Response.status(200).entity("getPerson is called").build(); } @GET @Path("/vip") public Response getPersonVIP() { return Response.status(200).entity("getPersonVIP is called").build(); } } |
При вызове URI: ‘/persons‘ будет вызван метод getPerson;
При вызове URI: ‘/persons/vip‘ будет вызван метод getPersonVIP;
30. Что делает аннотация @PathParam?
@PathParam внедряет значения параметра URI, который задан в выражении.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.core.Response; @Path("/persons") public class PersonRestService { @GET @Path("{id}") public Response getPersonById(@PathParam("id") String id) { return Response.status(200).entity("getPersonById is called, id : " + id).build(); } } |
При вызове URI ‘/persons/1‘ получим вызов getPersonById и id = 1;
31. Что делает аннотация @QueryParam?
@QueryParam внедряет параметр запроса URI в Java метод.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import java.util.List; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Response; @Path("/persons") public class PersonService { @GET @Path("/query") public Response getPersons( @QueryParam("from") int from, @QueryParam("to") int to, @QueryParam("orderBy") List<String> orderBy) { return Response .status(200) .entity("getPersons is called, from : " + from + ", to : " + to + ", orderBy" + orderBy.toString()).build(); } } |
При вызове URI: “/persons/query?from=10&to=20&orderBy=age&orderBy=name” получим вызов метода getPersons и from = 10, to = 20, orderBy[age, name]
32. Что делает аннотация @MatrixParam?
@MatrixParam устанавливает соответствие “name=value” в пути URI.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import javax.ws.rs.GET; import javax.ws.rs.MatrixParam; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.core.Response; @Path("/books") public class BookService { @GET @Path("{year}") public Response getBooks(@PathParam("year") String year, @MatrixParam("author") String author, @MatrixParam("country") String country) { return Response .status(200) .entity("getBooks is called, year : " + year + ", author : " + author + ", country : " + country) .build(); } } |
33. Что делает аннотация @FormParam?
@FormParam связывает HTML параметры в Java методе.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import javax.ws.rs.FormParam; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.core.Response; @Path("/persons") public class PersonService { @POST @Path("/add") public Response addPerson( @FormParam("name") String name, @FormParam("age") int age) { return Response.status(200) .entity("addPerson is called, name : " + name + ", age : " + age) .build(); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<html> <body> <form action="/persons/add" method="post"> <p> Name : <input type="text" name="name" /> </p> <p> Age : <input type="text" name="age" /> </p> <input type="submit" value="Add Person" /> </form> </body> </html> |
34. Какие два способа получения заголовка HTTP запроса в JAX-RS вы знаете?
- Внедрить в метод с помощью @HeaderParam
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.HeaderParam; import javax.ws.rs.core.Response; @Path("/persons") public class PersonService { @GET @Path("/get") public Response getPerson( @HeaderParam("person-agent") String personAgent) { return Response.status(200) .entity("getPerson is called, personAgent : " + personAgent) .build(); } } |
Вызвав URI: “/persons/get”, будет вызван метод getPerson с параметром personAgent : Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.0
2) Программно с помощью аннотации @Context
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.core.Context; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.Response; @Path("/persons") public class PersonService { @GET @Path("/get") public Response getPerson(@Context HttpHeaders headers) { String personAgent = headers.getRequestHeader("person-agent").get(0); return Response.status(200) .entity("getPerson is called, personAgent : " + personAgent) .build(); } } |
Вызываем URI: “/persons/get”, результат: вызов метода getPerson и personAgent : Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.0
35. Как скачать файл с помощью JAX-RS?
- Задать аннотацию @Produces(‘?’) над сервисным методом с указанием возвращаемого в ответе типа. Вместо ‘?’ используйте text/plain, image/png и т.д.
- Установить Conent-Description в заголовке ответа для оповещения браузера показать всплывающее окно для загрузки.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
import java.io.File; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.ResponseBuilder; @Path("/image") public class ImageService { private static final String FILE_PATH = "c:\\my.png"; @GET @Path("/get") @Produces("image/png") public Response getFile() { File file = new File(FILE_PATH); ResponseBuilder response = Response.ok((Object) file); response.header("Content-Disposition", "attachment; filename=image_from_server.png"); return response.build(); } } |
к списку вопросов раздела JEE
51One thought on “Собеседование по Java EE — Web services (вопросы и ответы)”
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.
В ответе на первый вопрос есть фраза «основанных на определённых протоколах (SOAP, XML-RPC, REST и т. д.)». И потом в ответе на пятый вопрос приведен пример статьи на хабре где сказано » REST – это не протокол и не стандарт, а архитектурный стиль«. Думаю нужно подправить ответ на первый вопрос.