SAP Graph自由研究1時間チャレンジSAP Graph自由研究1小时挑战
本文是作为2021年夏季自由研究的一部分而撰写的chillSAP文章。
首先
暑假已经结束了呢。
正在阅读这篇文章的各位,我想大家都是成年的绅士淑女吧,大家还记得小时候暑假做过什么样的自由研究吗?
不管内容如何,说到我自己,我想起了在上学的那天早晨编造研究,并在截止日期前拼命地在工作纸上乱写了些虚假的结果。
虽然本来我想展示给大家看的是我在童年时培养起来的,在脑海中充当最佳研究室的能力,从假设验证到思考,一切尽在其中。但我忍住了这份渴望,在一个小时内进行了实机验证并尝试写下这篇文章。
以上、无论如何对于准备不足的强调。
我们立刻进入正题吧。
研究的起因
我对GraphQL这项技术一直很感兴趣,并且从去年的TechEd上听到了SAP Graph这个词后就一直心存好奇,因此选择了这个主题。
GraphQL是什么?
在讲解SAP Graph之前,我们先来简单介绍一下GraphQL。
GraphQL是一种用于Web API的查询语言,类似于SQL在Web API中的作用。(这么说是为了让大家更好理解概念)
它经常与传统的Restful API进行比较,有时也被称为下一代API。
RestfulAPI具有以下已克服弱点的特点:
– 无法在调用方控制获取的信息
– 对规范变更不敏感
如果从调用者的应用程序中只需要姓名(name)这一项数据,尽管可以获取到许多其他信息,但除了姓名外的数据都会被认为是不必要的数据。也就是说,应用程序只能沉默地接收这些无用的信息。
如果需要超出所获得的信息的额外信息,例如,如果想知道出演作品中的名字是Darth Vader的是哪部,就需要执行另一个API,这会带来一些麻烦。
此外,如果API的端点名称规范发生更改,调用方也需要进行更改,这也会增加一些麻烦。
GraphQL是一种解决了这类问题的机制。
嗯?OData呢? (Ń 呢?)
在解释GraphQL之前,如果你很聪明,可能已经意识到了以下内容。
在SAP的世界中(不仅限于SAP),有一个强大的盟友叫作OData。
调用OData时的描述可以定义如下。
@Override
protected void doPost(final HttpServletRequest request, final HttpServletResponse response)
throws ServletException, IOException {
final PurchaseOrder po = PurchaseOrder.builder()
.purchaseOrderType("NB")
.purchasingOrganization("organization")
.purchasingGroup("group")
.companyCode("1000")
.supplier("supplier")
.language("JA")
.purchaseOrderItem(poi)
.build();
与之前介绍的一般的RestfulAPI不同,OData可以在调用方控制传递(接收)给API的信息量。我之前不经意间一直在使用它,但原来它是如此大的恩赐啊。(深深感慨)
然而,即使使用OData,也无法应对OData本身规范的变化。而且由于标准的OData通常是按照单个发货单进行构建的,所以如果要获取与特定发货单相关联的销售单据,就需要执行多个OData操作。
用GraphQL解决问题
在GraphQL中,我们可以指定所需的数据并发送请求。
以前面的例子为例,如果只想获取Darth Vader出演的作品,我们可以通过这样的查询来执行GraphQL的终端点。
query {
person(personID:4) {
name
filmConnection {
films {
title
}
}
}
}
这样的话,大的优点就是只需一次请求就可以获取所需信息。
此外,无需理解后台每个API的规范和终点,这也是一个重要特点。
就GraphQL而言,我已经写了下面的内容,但现在我们来讨论正题。
重新定义SAP Graph是什么?
尝试使用SAP Graph
由于时间限制,我只有1小时的时间,所以我将在SAP Graph上轻松执行API Business Hub,同时感谢SAP。 (这篇博客和内容几乎相同。)
我本来想试试在一次执行中获取与该SalesQuote有关的更强大的Product信息等,但这将在以后的机会中再试一下。(时间不够)
考察和展望
最近在OSS的世界中,GraphQL正逐渐流行起来,我觉得在SAP的世界中也可能会变得流行起来。
再次感受到了OData的优点。
但是尽管它封装了复杂的SAP业务对象,标准的OData数量庞大,寻找起来还是很困难,希望在SAP Graph中能够更轻松一些,这是我的乐观想法。
请參考
如果没有的话,我就已经死了。真的非常感谢你。
https://dev.classmethod.jp/articles/reinvent19-graphql-modern-api/
https://qiita.com/NagaokaKenichi/items/a4991eee26e2f988c6ec
https://blogs.sap.com/2021/06/08/part-1-introduction-to-sap-graph/
https://blogs.sap.com/2021/06/15/part-2-hello-graph-write-your-first-sap-graph-application/
https://explore.graph.sap/docs/beta/overview
结束
中国传统文化非常注重教育与日常生活的规划,因此听到有人建议花更多时间,认真写代码进行验证,我感到非常抱歉。希望在来世,能成为一个更加计划性强、能够完成作业的孩子。暂时只希望大家能大致理解我传达的意思。这篇文章虽然稍显随意,但我想通过无声的压力来结束它。