跳转到内容
技术文章
作者的头像Alex万博新体育手机客户端is GAILLOT

web服务调用的最佳实践

嗨,我是SAP的Alexis Gaillot,我在SAP智能RPA产品的采用团队工作。

在这篇博文中,我将向你展示如何使用ajax处理web服务。调用函数of SAP Intelligent RPA 1.0 and how to investigate if your call does not work as expected.

这篇博文将被分成不同的部分

  • 上下文
  • 原因
  • 原因及解决方法
    • 客户端证书
    • 服务器证书
    • 饼干
    • 令牌
  • 最佳实践示例
    • 邮递员
    • 旋度
    • 终端的命令
    • Ajax调用
  • 结论

上下文

当你使用ajax时。调用函数to communicate with a web service, you receive a status from the server such as:

  • 200.
  • 300.
  • 等等。

有时,调用似乎不起作用,您会收到一条通用的错误消息。这可以是:

  • 只是状态。
  • 一般的信息。

很难知道这个问题来自哪里。

原因

Web服务可以组合许多不同的设置:

  • 服务器端/客户端证书。
  • SSL证书,用于加密信息,提供身份验证等。如果您想在服务器上进行身份验证,它们是必需的。
  • 令牌。

原因及解决方法

在本部分中,您可以找到问题的主要原因以及如何解决问题。

在以下主题中,您将了解更多:

  • 客户端证书
  • 服务器证书
  • 饼干
  • 令牌

客户端证书

使用客户端证书在服务器上进行身份验证。有时无法使用证书连接到服务器。

你可以使用这个选项ignoreClientCertificate避免使用证书认证。

ctx.ajax.call({ url: url, method: 'GET', contentType: "application/json", headers: headers, ignoreClientCertificate: true, success: function(res, status, xhr) { rootData.xCSRF = xhr.headers["x-csrf-token"]; var value = xhr.headers["Set-Cookie"]; rootData.Cookies = value.split('; ')[0] + "; "; sc.endStep(); }, error: function(xhr, status, statusText) { ctx.log('error get') sc.endStep(); } });

服务器证书

API可能需要这样的证书。它们通常是强制性的。

ctx.ajax.call在没有这些证书的情况下无法强制调用。

此外,由于不在浏览器环境中,因此无法指定要使用哪些证书。

在这种情况下,您将需要使用cURL,有关更多信息,请参阅章节最佳实践示例在下面。

饼干

cookie允许您验证客户端请求并保存所有会话信息。

如果您需要在通话中使用cookie,则必须设置cookie以保存此信息。然后,您将能够在另一个呼叫中使用它。

例子:
ctx.ajax.call({ //First call, get the cookies information url: "[url]", method: e.ajax.method.get, contentType: e.ajax.content.json, usePassport: true, ignoreClientCertificate:true, headers : { 'Authorization': 'Basic [base 64 login:password]', 'X-CSRF-Token': 'Fetch' }, success: function(res, status, xhr) { try { var csrf = xhr.headers['x-csrf-token']; var cookie = xhr.headers['Set-Cookie']; var myUrl = "https://domainName/sap/opu/odata/sap/xxx"; ctx.ajax.call({ //Second call, use the cookies in the headers object url: myUrl, method: e.ajax.method.post, ignoreClientCertificate:true, contentType: 'application/json;charset=utf-8', headers : { 'Content-type': 'application/json;charset=utf-8', 'X-CSRF-TOKEN': csrf, 'Cookie': cookie }, success: function(res, status, xhr) { ctx.log("Good call"); }, error: function(xhr,res,status) { ctx.log("Something went wrong with the call"); } }); } catch (ex) { ctx.log("Something went wrong : " + ex.description); } }, });

令牌

令牌是服务器创建的一段数据,其中包含标识用户和令牌有效性的信息。如果在Ajax调用中不正确地使用令牌,可能会导致问题。与cookie一样,令牌需要两次调用。

例如,在工厂中进行API调用。使用第一个调用来获取令牌。第二个调用触发API调用,它在作业队列中创建一个作业。在本例中,调用是链接的。如果第一次调用成功,就会发生第二次调用。

例子:
ctx.ajax.call({ //First call, get the token url: serviceAccount.urls.accessTokenURL, //Url got from the service key “url parameter + /oauth/token?grant_type=client_credentials” method: e.ajax.method.get, contentType: e.ajax.content.json, header:{ Accept: e.ajax.content.json, Authorization: 'Basic ' + ctx.base64.encode(serviceAccount.credentials.clientID + ':' + serviceAccount.credentials.clientSecret, false) // clientID and clientSecret got from the service key }, success: function(res, status, xhr) { ctx.log('Token generated'); sc.localData.Token = 'Bearer ' + ctx.get(res, 'access_token'); ctx.ajax.call({ // Second call url: serviceAccount.urls.apiTriggerURL, //Url from the API trigger (end with “/run”) method: e.ajax.method.post, contentType: e.ajax.content.json, header:{ Accept: e.ajax.content.json, 'irpa-api-key': serviceAccount.urls.irpaTriggerToken, //Token get from the API trigger Authorization: sc.localData.Token }, data:{ //Payload of your API Trigger }, success: function(res, status, xhr) { ctx.log('success'); sc.endStep(); return; }, error: function(xhr, status, statusText) { //web service failed sc.setError(e.error.Fail, 'Web service failed: [' + status + ']' + statusText + ' - ' + xhr.responseText); sc.endScenario(); return; } }); }, error: function(xhr, status, statusText) { //web service failed sc.setError(e.error.Fail, 'Web service failed: [' + status + ']' + statusText + ' - ' + xhr.responseText); sc.endScenario(); return; } });

最佳实践示例

下面是一些Web服务调用的最佳实践示例。

如前所述,由于Ajax调用的复杂性,您可能会面临不同的问题。

要用Ajax调用评估这些问题,您可以使用多个工具:

  • 邮递员
  • 旋度
  • 终端的命令
  • Ajax调用

让我们先看看它们到底是什么,我们可以用它们做什么。

邮递员

Postman是一个允许您查询和测试Web服务和API调用的工具。

该工具具有多种功能,易于使用。

旋度

cURL是一个命令行工具,您可以使用它来获取或发送数据,包括使用URL语法的文件。

在Windows 10 build 17063上,默认情况下包含cURL。

终端的命令

在命令提示符中,您可以在评估期间测试cURL命令。

如果测试成功,代理通过终端调用cURL命令。

Ajax调用

如何配置您的Ajax调用函数

如果您不知道如何配置Ajax调用函数,请遵循以下流程:

  1. 使请求在Postman上工作

注意:如果它甚至不能与Postman一起工作,这意味着您不能让它与Ajax调用函数一起工作。

a.启动后,单击代码按钮。

b.选择您使用的编程语言(应该是“JavaScript - jQuery”)

注意: 你可以在左边的红框中看到不同的语言。在这里,我们选择JavaScript-jQuery语言,因为Ajax调用函数是用jQuery.ajax()方法开发的。在绿色方框中,您注意到由Postman生成的代码。

2.在Ajax调用函数中使用此代码

复制并粘贴此代码到桌面工作室并在必要时调整代码。有关详细信息,请参阅官方文档调用函数

函数getCall(成功,错误,localData){var结果;var url = localData。fetchAPI = "";//API调用来获取csrf令牌和cookies。调用({方法:e.a axx .method。get, url: url, contentType: e.a axx .content。{'授权':localData. json。auth, 'x-csrf-token': 'fetch', 'Cookie': 'fetch', 'Accept': 'application/json'}, ignoreClientCertificate: localData。clientCert, success: function(res, status, xhr) {if(res.d){result = xhr;成功(结果);}其他{结果= res;错误(结果);}},错误:函数(xhr,错误,statusText){结果= res; error(result); } });

如何处理Ajax调用问题

如果在上一个流程中执行测试后,在调用期间仍遇到问题(来自xhr对象的问题),请尝试以下测试:

  1. 试一试ctx.ajax.call有选项ignoreClientCertificate是真实的
注意: 如果它仍然不工作,检查错误代码,这可以引导您找到错误的根源。
2.在邮差中更改设置

默认情况下,SSL证书验证在邮差中未启用。这意味着即使证书不可用,它也会强制调用。

如果启用此选项后对Postman的调用不工作,这意味着该证书是进行调用的强制证书。如前所述,Ajax调用没有这个选项。

一种解决方案是使用cURL。

3.试试Postman给出的cURL代码

  • 遵循如何配置我的Ajax调用函数以上过程,从步骤1.。步骤1.b。,以检索正确的cURL代码。

  • 在这段代码中,删除所有字符将所有单引号替换为双引号。
  • 在命令提示符中运行cURL代码。

例子:

curl——location——请求GET“http://XXXX”

如果cURL代码中出现错误消息,请在Internet上进行搜索。错误消息通常是非常明确的。如果代码成功,则可以将其集成到SAP智能RPA调用。

  • 方法中实现此代码桌面工作室
var cmdCurl = 'curl -k——location——request GET "http://XXXX" ctx. var cmdCurl = 'curl -k——location——request GET "http://XXXX" ctx. varexec(cmdCurl, 60, function(reqdata) {var reqdata = ctx.json.parse(reqres.output);});

注:选项- k用于忽略客户端证书。

结论

您现在知道了如何使用web服务调用,以及如何在遇到问题时进行调查。

有了SAP Intelligent RPA 2.0,这将变得更容易。待优化。

要了解更多,您将在此之后的官方文件中找到进一步的信息链接

指定的标签

      1评论
      你一定是登录评论:评论或回复一篇文章
      作者的资料照片Sr万博新体育手机客户端inivas Rao
      拉奥斯

      太好了!谢谢分享!