首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ODATA javascript客户端库(与简单的Fetch或AJAX相比,它们的价值是什么)?

ODATA javascript客户端库(与简单的Fetch或AJAX相比,它们的价值是什么)?
EN

Stack Overflow用户
提问于 2019-06-13 15:51:22
回答 1查看 1.4K关注 0票数 0

目前,我们正在使用客户端javascript获取连接到我们的ODATA V4 ERP服务器:

代码语言:javascript
复制
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.jsJayData (或其他建议在:https://www.odata.org/libraries/) )。

但我看不到的是,对于开发人员来说,它是一个客观的指南,可以理解这些库提供的原因和提供的内容。

也就是说,我认为他们读取了特定ODATA服务的元数据。好吧,但这会增加什么能量呢?

也许我的思维障碍是,我们只是:

  1. 只搜索JSON数据
  2. 不执行任何嵌套查询(只有简单的$filter、$select)
  3. 只是简单的得到,张贴,补丁
  4. 或者,这些库可能是ODATA V4之前缺少的功能所必需的。

有谁能简单地描述一下这些库的特性及其独特的价值主张(借用风险投资术语)给开发者吗?我敢打赌其他人会发现这很有用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-19 16:20:47

短答案

你是正确的。如果您所做的只是简单的操作,那么在一天结束时,您不需要任何这些库,它们只是遵循一些特定约定(即OData规范)的REST调用。

长答案

我们拥有所有这些客户端API的原因是OData提供/定义了更多的东西。

让我们试着用一个例子来讨论它。我使用的示例是批处理请求 in OData。我最简单的术语Olingo定义了一种将多个HTTP请求合并在一起的方法。它有一个定义良好的语法。看上去像这样

代码语言:javascript
复制
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请求,以及操作您想要的操作。

现在,如果您使用客户端库(示例是泛型的,并且可能因库而异),代码应该如下所示

代码语言:javascript
复制
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字符串(在筛选器、导航属性等情况下)。调试人员认为,如果您遗漏了一个括号或拼错了一个标头名称,那么调试代码就可以用于构建应用程序/产品的核心逻辑,并让标准化的、重复的和乏味的(固执己见的想法)为您工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56584287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档