目前,我们正在使用客户端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库(阿帕奇、O.js、JayData (或其他建议在:https://www.odata.org/libraries/) )。
但我看不到的是,对于开发人员来说,它是一个客观的指南,可以理解这些库提供的原因和提供的内容。
也就是说,我认为他们读取了特定ODATA服务的元数据。好吧,但这会增加什么能量呢?
也许我的思维障碍是,我们只是:
有谁能简单地描述一下这些库的特性及其独特的价值主张(借用风险投资术语)给开发者吗?我敢打赌其他人会发现这很有用。
发布于 2019-06-19 16:20:47
短答案
你是正确的。如果您所做的只是简单的操作,那么在一天结束时,您不需要任何这些库,它们只是遵循一些特定约定(即OData规范)的REST调用。
长答案
我们拥有所有这些客户端API的原因是OData提供/定义了更多的东西。
让我们试着用一个例子来讨论它。我使用的示例是批处理请求 in 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调用,然后解析出类似的响应,但作为应用程序开发人员,您所关心的只是批量处理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字符串(在筛选器、导航属性等情况下)。调试人员认为,如果您遗漏了一个括号或拼错了一个标头名称,那么调试代码就可以用于构建应用程序/产品的核心逻辑,并让标准化的、重复的和乏味的(固执己见的想法)为您工作。
https://stackoverflow.com/questions/56584287
复制相似问题