Клиентские библиотеки ODATA javascript (каково их значение по сравнению с простыми Fetch или AJAX)? - PullRequest
0 голосов
/ 13 июня 2019

В настоящее время мы используем клиентскую выборку JavaScript для подключения к нашему серверу ODATA V4 ERP:

const BaseURL = 'https://pwsepicorapp.com/ERP10.2/api/v1/Erp.BO.JobEntrySvc/'

const fetchJobNum = (async () => {
    let url = BaseURL + 'GetNextJobNum'
    const reply = await fetch(url,{
        method: 'POST',
        mode: 'cors',
        headers: {
            'Accept': 'application/json',
            'Authorization': 'Basic xxxx',
            'x-api-key' : '0HXJZgldKZjKIXNgIycD4c4DPqSrzn2UFCPHbiR1aY7IW',
            'Access-Control-Allow-Origin': '*',
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({})
    })
    let rsp = await reply.json()
    let job = rsp.parameters.opNextJobNum
    return job
})

И это прекрасно работает для нас.Недавно мы начали изучать JavaScript-библиотеки ODATA ( Apache OLINGO , O.js , JayData (или другие, предлагаемые по адресу: https://www.odata.org/libraries/)

Но я не вижу объективного руководства для разработчика, чтобы понять, почему и что предоставляют эти библиотеки.

Т.е. я думаю, что они читают метаданные для конкретной службы ODATA. Прекрасно, но что делает власть?что добавить?

Возможно, мой ментальный блок в том, что мы только:

  1. ищем только данные JSON
  2. Не выполняем никаких вложенных запросов (только простой $ filter, $выберите)
  3. Просто выполните простые GET, POST, PATCH
  4. Или, возможно, эти библиотеки были необходимы для функциональности, которая отсутствовала до ODATA V4

Может кто-нибудь дать краткийописание возможностей этих библиотек и их УНИКАЛЬНЫХ ЦЕННОСТНЫХ ПРЕДЛОЖЕНИЙ (заимствовать термин венчурного капитала) для разработчиков? Держу пари, другие сочтут это полезным.

1 Ответ

1 голос
/ 19 июня 2019

Короткий ответ

Вы правы. Если все, что вы делаете, - это просто простые операции, то вам не нужны никакие из этих библиотек, поскольку в конце дня они являются просто вызовами REST, которые следуют определенным соглашениям (т. Е. Спецификация OData).

Длинный ответ

Причина, по которой у нас есть все эти клиентские API, заключается в том, что OData предлагает / определяет гораздо больше вещей.

Давайте попробуем перейти к примеру. Пример, который я использую: Пакетные запросы в OData. В простейших терминах Olingo определяет способ объединения нескольких HTTP-запросов в один. У него есть четко определенный синтаксис. Это выглядит примерно так

POST /service/$batch HTTP/1.1 
Host: host 
OData-Version: 4.0
Content-Type: multipart/mixed; boundary=batch_36522ad7-fc75-4b56-8c71-56071383e77b
Content-Length: ###

--batch_36522ad7-fc75-4b56-8c71-56071383e77b
Content-Type: application/http 

GET /service/Customers('ALFKI') 
Host: host

--batch_36522ad7-fc75-4b56-8c71-56071383e77b 
Content-Type: application/http 

GET /service/Products HTTP/1.1 
Host: host 

--batch_36522ad7-fc75-4b56-8c71-56071383e77b--

Теперь здесь довольно много вещей.

  • Вы должны начать пакетный запрос с batch_<Unique identifier> и отделить отдельные HTTP-запросы от границы пакета, а когда вы закончите, вы завершите его с batch__<Unique identifier>--
  • Вы задаете идентификатор партии в качестве заголовка и отправляете дополнительные заголовки (например, тип контента, длина контента), которые вы можете видеть в.

Теперь вернемся к исходному вопросу, чтобы быть уверенным, что вы можете использовать много конкатенации строк в своем коде JavaScript, генерировать правильную полезную нагрузку и выполнять вызов ajax, а затем анализировать ответ аналогичного типа, но как разработчик приложения, все, что вам нужно about пакетирует ваш запрос GET, POST, PUT и DELETE и выполняет операцию, которую вы хотите.

Теперь, если вы используете клиентскую библиотеку (пример является общим и может отличаться от библиотеки к библиотеке), код должен выглядеть примерно так:

OData.request( {
    requestUri: "http://ODataServer/Myservice.svc/$batch",
    method: "POST",
    data: { __batchRequests: [
       { requestUri: "Customers('ALFKI')", method: "GET" },
       { requestUri: "Products", method: "GET" }
    ]}
},
function (data, response) {
    //success handler
}, undefined, OData.batchHandler);

Таким образом, с точки зрения чисто бизнес-предложений библиотеки, подобные этим, могут сэкономить вам несколько человеко-часов в зависимости от размера вашего приложения, которое будет использовано для создания правильных строк полезной нагрузки или правильной строки URL-адреса (в случае фильтров, свойств навигации и т. Д.) ) и отладка продумывали код на случай, если вы пропустили скобку или неправильно написали имя заголовка, которое можно использовать при построении базовой логики для приложения / продукта и позволить стандартизированной, повторяющейся и скучной (взвешенной мысли) работе для вас.

...