Правильный дизайн шаблона и технологии для сопоставления функций друг с другом - PullRequest
2 голосов
/ 27 апреля 2020

Аннотация:

Я пытаюсь создать «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) - что мне нужно, совет, см. Схему ниже (все в черных ящиках проверено и работает, обращайтесь к красным фигурам, которые где мне нужен совет).

Архитектура потока данных высокого уровня:

enter image description here

Актуальный вопрос 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>

Спасибо миллион!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...