Аннотация:
Я пытаюсь создать «API взаимодействия данных» или, другими словами, «API интерфейса запросов высокого уровня», который будет использоваться (учеными-данными, веб-приложения, любой, кто хочет запросить несколько наборов данных).
Допущения:
Базовые данные обычно будут в следующих форматах:
1) Сценарий наилучшего варианта - XML (с правильным XSD). • XML служит метаданными, которые описывают (где находятся эти данные, файл, веб-сервис и т. Д. c ... описания полей) • указывают на данные с разделителями (CSV) или даже двоичные данные
ИЛИ
2) Просто введите XML в качестве метаданных (НЕТ XSD).
• XML служит метаданными, которые описывают (где находятся эти данные, файл, веб-сервис и т. Д. c ... описания полей) • указывают на разделенные данные (CSV) или даже двоичные данные данные
ИЛИ
3) Обычные данные (CSV без заголовков)
Этот API-интерфейс будет предоставлен как распространяемый (В случае Java JAR или * Расширение 1104 *), которое может быть загружено пользовательскими приложениями.
Достигнутый прогресс:
1) Я могу загрузить XSD, используя JAXB для Java и PyXB для Python версии и создания класса на основе информации XSD. Я называю «xjc» как системный процесс через Java:
ProcessBuilder processBuilder = new ProcessBuilder(CMD_ARRAY)Process process = processBuilder.start();
2) Я также могу связывать объекты и данные в памяти и выпускать (что я называю «нативными запросами»).
//1. instance
jaxbContext = JAXBContext.newInstance(clazz);
//2. Use JAXBContext instance to create the Unmarshaller.
unmarshaller = jaxbContext.createUnmarshaller();
//3. Use the Unmarshaller to unmarshal the XML document to get an instance of JAXBElement.
inStream = new FileInputStream( this.xmlFile);
OaisInteropFrameworkStates.setState(OaisInteropFrameworkStates.STATE_LOAD_NATIVE_API);
returnedObject = unmarshaller.unmarshal(inStream);
3) Следующий шаг (высокоуровневое API-отображение Publi c) - что мне нужно, совет, см. Схему ниже (все в черных ящиках проверено и работает, обращайтесь к красным фигурам, которые где мне нужен совет).
Архитектура потока данных высокого уровня:
Актуальный вопрос 1) Что лучше подход шаблона проектирования, чтобы автоматически отображать / переносить различные функции?
Допущения:
1) (пользовательский род для отображения publi c) - Пользователь ДОЛЖЕН предоставить XML (или, возможно, JSON) сопоставление сигнатур функций 1: 1
2) Сопоставленная функция всегда будет возвращать строку
3) Собственный API должен быть отделены от Publi c API и они не знают друг друга. (за исключением файла сопоставления или любого автоматически сгенерированного кода, основанного на файле сопоставления xml. Аналогично интерфейсам клиента и сервера.
4) У меня очень ограниченное время для работы над этим проектом, 8-10 часов в неделю. Поэтому простота выше элегантности.
Некоторые мысли:
Я смотрел на XML -RP C Python (https://docs.python.org/3/library/xmlrpc.client.html#module -xmlrp c .client ) или Java (https://www.tutorialspoint.com/xml-rpc/xml_rpc_examples.htm).
2) Также REST-RP C или некоторая другая сервис-ориентированная архитектура.
3) Пусть пользователь создаст XSD, который сопоставляет конечные точки функции, и использует JAXB (скорее нет, XSD слишком многословен, и в наши дни Python единомышленники будут ненавидеть это ...)
Мне нравится подход, в котором XML -RP C использует аналогичное отображение xml:
Запрос:
<?xml version="1.0" encoding="ISO-8859-1"?>
<methodCall>
<methodName>sample.sum</methodName>
<params>
<param>
<value><int>17</int></value>
</param>
<param>
<value><int>13</int></value>
</param>
</params>
</methodCall>
Ответ:
<?xml version="1.0" encoding="ISO-8859-1"?>
<methodResponse>
<params>
<param>
<value><int>30</int></value>
</param>
</params>
</methodResponse>
Спасибо миллион!