Когда продумываешь алгоритм обмена данными между клиентом и сервером, то я предпочитаю выбрать XML как средство для стандартизации сообщений, потому что обрабатывать его можно на всех языках программирования, в целом, без ущерба производительности и довольно таки просто. Да и приятно работать с органичным и достаточно структурированным набором данных, вместо того, чтобы парсить какие-то непотные кучи информационного шума.
Обоснованность выбора
Выбор XML — это мой личный выбор, который удовлетворяет моим целям. Вы можете выбрать для обмена сообщениями какой-либо другой протокол (SOAP, XML-RPC или другие), либо же реализовать свой, в конечном счёте.
Структура сообщения
Каждое сообщение начинается с заголовка сообщения и одновременно единственно-возможного корня XML-дерева.
Типы сообщения. Запрос и ответ
Тип сообщения может быть различным, но в целом он сводится к типам связи между сервером и клиентом. Request — это сообщение от клиента к серверу, response — это сообщение от сервера к клиенту, а error — это сообщение об ошибке, которые можно послать в обе стороны.
Структура самого сообщения идентична для запроса и для ответа:
Тип может быть либо request, либо response. Методов как при запросе, так и при ответе может быть неограниченное количество. В каждый метод могут быть включены аргументы для вызова функции (при наличии данных аргументов). Каждый аргумент должен быть разделён по типу, чтобы правильно определить разбор типов.
Типы данных
Данные при передаче могут быть следующего рода:
- integer — целочисленные величины
- float — величины с плавающей точкой
- string — строковые величины
- boolean — булевы величины (true, false или 1, 0)
- array — массивы (сериализуются и/или кодируются в base64 по определённым алгоритмам)
Все величины, кроме array, пересылаются в чистом виде, без обработки на стороне сервера/клиента.
Сообщение об ошибке
Сообщение об ошибке несколько отличается от двух других видов сообщений.
Сообщений об ошибке может быть несколько, все они генерируются на стороне сервера.
Реализация
Я реализовал приложение, называемое xmlapi, которое реализует сервер для подобного формата обмена сообщениями.