この記事では、ApexでREST API のクラスとメソッドを書く方法を紹介します。
REST APIのクラスとメソッドの書き方
REST API のクラスとメソッドは以下のように書きます。
@RestResource(urlMapping='/sample/url')
global with sharing class ClassName {
@HttpGet
global static void doGet()(
}
}
ポイント
- アクセス修飾子は global
- @RestResource(urlMapping=’/url’)をつけることでREST APIのクラスとすることができ、urlMapping=’/**’ の部分でURLを指定する
- @HttpGetや、@HttpPost をつけることでGETやPOSTに対応したメソッドを作成することができる。
上記のREST APIを呼び出す場合は以下のようにします。
HTTPメソッド:GET
URL: https://組織ドメイン.salesforce.com/services/apexrest/sample/url (名前空間がある場合は https://組織ドメイン.salesforce.com/services/apexrest/名前空間/sample/url)
JSONを受け渡す部分の書き方
次に、JSONを渡すPOSTメソッドを見ていきます。
以下のJSONをリクエストボディとして渡すとします。
{
"hoge": {
"aaa": "AAA"
"bbb": "BBB"
}
}
この時、Apexメソッドは以下のように書きます。
@HttpPost
global static void doPost(Map<String,String> hoge)(
String aaa = hoge.get("aaa");
}
このようにJSONは自動的にパースされ、メソッドの引数として使用可能です。
逆にJSONを返したい時は以下のようにします。
1. オブジェクトを返す
@HttpPost
global static void doPost(Map<String,String> hoge)(
Account acc = [SELECT Name, Phone FROM Account LIMIT 1];
return acc;
}
これだけで、レコード acc の Name, Phone 項目に関する情報がJSONに変換されてHTTPレスポンスで返ってきます。または、以下のようにします。
2. JSONを作成して返す
JSONGenerator json = JSON.createGenerator(false);
json.writeStartObject();
json.writeStringField('ccc', 'CCC');
json.writeEndObject();
String jsonBody = json.getAsString();
RestResponse res = RestContext.response;
res.addHeader('Content-Type', 'applecation/json');
res.statusCode = 201;
res.responseBody = Blob.valueOf(jsonBody);
return;
JSONを作成した後、RestResponse オブジェクトの responseBody にJSONを付加して返します。
まとめ
- @RestResource(urlMapping=’/url’)をつけることでREST APIのクラスとすることができる
- @HttpGetや、@HttpPost をつけることでGETやPOSTに対応したメソッドを作成できる
- JSONは自動パースされてメソッドの引数として扱うことができる
コメント