Это зависит от того, используете ли вы SOAP или REST.SOAP более ограничен;в результате более вероятно, что у вас будет файл WSDL для генерации классов, которые взаимодействуют с API.
С другой стороны, если вы используете REST, будет рассматриваться просто предоставление RESTful URI.достаточно, чтобы удовлетворить ограничения веб-службы RESTful, имеющей унифицированный интерфейс.
REST имеет тенденцию все больше расширяться по сравнению с SOAP, поскольку это разрешающий архитектурный стиль.Я бы предпочел этот метод, и я бы рекомендовал этот метод, если вы новичок в разработке веб-сервисов.
В зависимости от того, какой язык вы используете, я предполагаю, что Java, вы можете использовать Restlets или Spring 3.0 'S REST Framework, чтобы помочь вам создать веб-сервис RESTful.Эти инструменты действительно облегчают эту работу и помогают вам соответствовать 6 ограничениям веб-службы RESTful и соответствовать 4 ключевым целям .
ОБНОВЛЕНИЕ:
Предполагая, что у вас уже есть существующий объектно-ориентированный код, и если вы хотите представить этот код в качестве REST API, с помощью Spring 3.0 MVC создайте подкласс Controller, который обернет ваш существующийпакет:
Пример GET :
Ресурс: Javadocs для ObjectMapper Джексона POJO / JSON Marshaller
// this is the wrapper around your existing Java packages.
@Controller
public class UserController {
protected static final DATA_TYPE = "json";
// In REST, GET method is used to retrieve data with no side effects,
// meaning that no changes are made to the data on the server.
@RequestMapping(value="/users/{username}", method=RequestMethod.GET)
public void getUserData(@PathVariable("username") String userName, Model model) {
// this is your existing class
UserDataService userDataService = new UserDataService();
// assume you have a class User, and getUserDetails gives you that POJO object.
User user = userDataService.getUserDetails(username);
// marshal the User object to JSON, using Jackson, and write as output in response
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(response.getWriter(), user);
}
}
// assume you have an existing POJO class called User
class User implements Serializable {
String username;
String age;
String birthday;
String mood;
String getMood() { return this.mood; }
String getBirthday() { return this.birthday; }
String getAge() { return this.age; }
String getUsername() { return this.username; }
String setMood(String mood) { this.mood = mood; }
String setBirthday(String birthday) { this.birthday = birthday; }
String setAge(String age) { this.age = age; }
String setUsername(String username) { this.username = username; }
}
Запрос :
http://api.example.com:8080/users/jmort253/
Ответ:
{
"username":"jmort253",
"mood":"good",
"age":"not too old and not too young",
"birthday","Jan 1, 1900"
}
XML вместо JSON :
Основное различие между возвратом XML и возвращением JSON заключается в использовании маршаллера.Используя javax.xml.bind.annotations, вы можете размещать аннотации в классе POJO, чтобы маршаллер мог преобразовать его в XML, освобождая вас от необходимости вручную кодировать XML вручную:
Использование javax.xml.bind.annotations для преобразования объектов Java в XML и XSD .Этот ресурс также объясняет, как сгенерировать XML-схему, если вы считаете это обязательным требованием к вашей веб-службе REST.
@XmlRootElement
class User implements Serializable {
String username;
String age;
String birthday;
String mood;
String getMood() { return this.mood; }
String getBirthday() { return this.birthday; }
String getAge() { return this.age; }
String getUsername() { return this.username; }
String setMood(String mood) { this.mood = mood; }
String setBirthday(String birthday) { this.birthday = birthday; }
String setAge(String age) { this.age = age; }
String setUsername(String username) { this.username = username; }
}
Вместо того, чтобы использовать класс ObjectMapper API-интерфейса Джексона для преобразования класса POJO в JSON, используйтепакет javax.xml.bind.annotations вместо ObjectMapper:
JAXBContext context = JAXBContext.newInstance(User.class);
Marshaller marshaller = context.createMarshaller();
// pretty print XML
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(user, System.out);
Помимо других ресурсов, в этой статье есть несколько примеров, в которых JAXB используется для десериализации ArrayList объектов POJO в XML.
Последнее предложение при работе с оболочками веб-службы REST - установить для всех уровней ведения журнала значение "ALL" или "DEBUG".Я считаю, что это помогает мне легче определить причину любых проблем, с которыми я сталкиваюсь при настройке веб-службы.Сами библиотеки будут выводить полезные сообщения отладки, которые помогут вам решить проблемы конфигурации, такие как отсутствующие зависимости, отсутствующие аннотации и другие проблемы, с которыми вы, вероятно, столкнетесь при работе с процессом преобразования в XML / JSON или при настройке Spring 3.0.
Как только вы настроите унифицированные интерфейсы, и вы сможете делать запросы GET и получать ответы, вы можете затем установить уровни ведения журнала на прежние уровни INFO или WARN.