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状态码:
错误处理与异常捕获:
除了根据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错误率,如果错误率上升或达到某个阈值,应及时通知相关团队。