【Salesforce Apex 教程】6.集成与外部API互动① HTTP请求
2023年09月19日
文章浏览:527

6. 集成与外部API互动

6.1 RESTful API的应用与实践

6.1.1 构建HTTP请求(参考:HttpRequest Class)

在Salesforce Apex中进行HTTP请求有其独特性。这里,我们深入探讨如何构建、发送和处理HTTP请求的细节。

初始化请求:

创建一个新的HttpRequest对象实例:

HttpRequest req = new HttpRequest();

设置请求方法:

使用setMethod方法为请求设置HTTP方法:

req.setMethod('GET');  // 也可以是'POST', 'PUT', 'DELETE'等

指定URL:

设置请求的URL。确保终点URL是正确的,并遵循API的规范:

req.setEndpoint('https://api.example.com/data');

设置请求头:

如果API需要某种形式的认证,你可以在这里设置它。常见的认证方式有Bearer Token、Basic Auth等:

req.setHeader('Authorization', 'Bearer ' + YOUR_ACCESS_TOKEN);

根据需要设置内容类型。常见的类型有application/json、application/xml等:

req.setHeader('Content-Type', 'application/json');

发送请求:

创建一个新的Http对象实例并使用其send方法来发送你之前构建的请求:

Http http = new Http();
HttpResponse res;
try {
    res = http.send(req);
    // 检查响应状态代码和响应体
    if(res.getStatusCode() == 200) {
        System.debug('Response: ' + res.getBody());
    } else {
        System.debug('Failed with status code: ' + res.getStatusCode());
    }
} catch(Exception e) {
    System.debug('Error: ' + e.getMessage());
}

注意事项:

·超时: 默认的超时时间是10秒,但您可以根据需要调整。

·异常处理: 当与外部API互动时,总是准备好处理各种异常情况。如上所示,使用try-catch结构来捕获和处理可能出现的任何错误。

·API调用限制: Salesforce有关于外部API调用的限制。确保您了解这些限制,并设计您的代码以避免超出限制。


6.1.2 有效处理API响应

当你在Apex中调用外部API后,正确地处理API的响应至关重要。以下是如何有效地处理API响应的步骤和最佳实践:


获取状态码:

每个HTTP响应都会有一个状态码,该状态码描述了请求的结果:

Integer statusCode = res.getStatusCode();

解析响应体:

大多数API会返回JSON格式的数据。使用Salesforce提供的JSON解析器来解析这些数据:

Map<String, Object> responseData = (Map<String, Object>) JSON.deserializeUntyped(res.getBody());

处理常见的HTTP状态码:

  • 200 OK: 请求成功。通常,您可以安全地解析响应体以获取数据。
  • 201 Created: 用于POST请求,表示资源成功创建。
  • 400 Bad Request: 请求无效或错误。检查您发送的数据格式和API文档。
  • 401 Unauthorized: 认证失败。确保您的认证信息是最新的,并且是有效的。
  • 403 Forbidden: 您没有权限访问该资源。确保您的账号有适当的权限。
  • 404 Not Found: 找不到请求的资源。检查您的URL和API文档。
  • 429 Too Many Requests: 您的请求太频繁。考虑增加延迟或使用退避策略。
  • 500 Internal Server Error: 服务器错误。考虑稍后再次尝试或联系API提供商。


错误处理与异常捕获:

除了根据HTTP状态码处理响应之外,还应该捕获在解析响应或执行其他操作时可能出现的任何Apex异常。

try {
    // 解析和处理响应代码
} catch (Exception e) {
    System.debug('Error processing response: ' + e.getMessage());
}

日志记录:

记录关键的API响应可以帮助调试问题:

System.debug('API Response: ' + res.getBody());

利用自定义对象存储关键响应:

在某些场景中,您可能需要保存API的响应以供将来参考或分析。考虑使用自定义对象来存储重要的API响应。

考虑响应时间:

外部API的响应时间可能会有很大的差异。确保您的应用或流程可以处理长时间的响应,并考虑设置适当的超时。


6.1.3 错误与异常的策略管理

在集成外部API时,错误和异常的管理是非常关键的,因为这不仅影响到当前的操作,还可能影响到用户的体验和系统的稳定性。以下是如何在Salesforce Apex中管理错误和异常的策略:


明确异常种类

·系统异常:由Apex运行时系统抛出的,如NullPointerException或ListException。

·自定义异常:您可以通过throw关键字手动抛出的异常。

基础异常处理

使用try-catch结构捕获可能的错误,并避免它们中断您的代码:

try {
    // 执行API调用或其他可能抛出异常的代码
} catch (Exception e) {
    System.debug('出现异常: ' + e.getMessage());
}

创建自定义异常类

为特定的错误情况定义自定义异常类,这样您就可以根据不同的异常类型采取不同的行动:

public class APIException extends Exception {}

记录所有异常

不仅在控制台上记录异常,还可以考虑将其保存在一个自定义对象或日志中,以便于未来的问题排查。

错误消息的用户友好性

如果可能的话,提供用户友好的错误消息,而不是直接展示技术性的错误详情。例如:“无法连接到服务,请稍后再试”比“HTTP 503 Service Unavailable”更容易被用户理解。

使用回退策略

当API请求失败时,尝试使用不同的方法或稍后再次尝试。例如,如果获取某个服务的数据失败,可能可以尝试从缓存或备份源获取数据。

设置超时和重试

对于外部API,总是设置一个合理的超时时间,以避免长时间的等待。如果操作是幂等的(即重复执行不会有副作用),可以考虑重试失败的请求。

测试异常路径

在测试您的代码时,确保包括异常路径。使用Test.isRunningTest()来模拟异常情况,并确保您的代码能够正确处理。

持续的监控与通知

使用工具和Dashboards监控API错误率,如果错误率上升或达到某个阈值,应及时通知相关团队。


关注 收藏