Apex REST API の機能強化: RFC 7230 検証の強制
Spring '24 リリースでは、Apex REST API 応答の動作を改善するための新たな改善が行われました。「RFC 7230」と呼ばれる一連のルールに従って、API 応答の名前と構造が正しく設定されていることを確認します。
次のように考えてください。Salesforce データ用の Apex REST API を構築するとき、それが他のアプリケーションとうまく連携できるようにしたいですよね。API 応答の RFC 7230 ヘッダー チェックを有効にすることは、すべてがルールに従っていることを確認する交通警官のようなものです。
これにより、応答に一貫性があり、理解しやすくなり、他の RESTful アプリとシームレスに連携できるようになるなど、多くの利点がもたらされます。これは、API に通信のためのスムーズな高速道路を提供し、エラーを減らし、アプリと他のアプリの間ですべてがスムーズに流れるようにするようなものです。
以下は、この新しい改善点を示す例です。
@RestResource(urlMapping='/exampleEndpoint/*')
global with sharing class ExampleRestController {
@HttpGet
global static String doGet() {
// Assume you're retrieving some Salesforce data
String responseData = '{"accountId": "001XXXXXXXXXXXXXXX", "name": "Sample Account"}';
// Set the RFC 7230 header to enable the check for structured and named responses
RestContext.response.addHeader('RFC-7230-Check', 'enabled');
return responseData;
}
}
この例では、アノテーションを使用して Apex REST エンドポイントが作成されます ( /exampleEndpoint/) @RestResource。doGet メソッドは HTTP GET リクエストを処理します。応答データは、サンプル Salesforce アカウントの JSON 表現です。
重要な追加機能は、 の使用ですRestContext.response.addHeader('RFC-7230-Check', 'enabled');。この行は、API 応答に RFC 7230 ヘッダーを追加し、応答が指定された名前付けと構造化の規則に従っていることを示します。
このヘッダーを組み込むことにより、Apex REST API 応答は RFC 7230 に準拠し、一貫性、明確性、および他の RESTful アプリケーションとのシームレスな統合が保証されます。これは、Salesforce アプリケーションと他のアプリケーションの間で API 通信がスムーズかつエラーなく行われるようにする交通警察のようなものです。
解答例
- Apex REST API の機能強化: RFC 7230 検証の強制
- Enforce RFC 7230 Validation for Apex RestResponse Headers
- Enforce RFC 7230 Validation for Apex RestResponse Headers - Need to understand
エラーの回避
I found out the solution this way how i solved the issue
res.responseBody = Blob.valueOf(JSON.serialize(responseList));
Instead of returning the serialised JSON as a string, it's now converted to a Blob using Blob.valueOf. This helps in ensuring that the response is treated as binary data, and it avoids the automatic addition of backslashes.