[salesforce]Apex REST作成時のtips

最近よくApexRESTを作成していて、
その中でちょっとしたtipsというかメモをメモっておきます。

エンドポイント

エンドポイントの指定には以下のように書きます。

@RestResource(urlMapping='/User/Login')

この時に、*を使う事も出来ます。

@RestResource(urlMapping='/User/*')

なので、ここにユーザーIDを入れたりして、そのIDを取得することで、
よりREST APIらしい(?)挙動でAPIを作成する事が出来ます。
apex側で送信されたIDを取得するには、以下のように/で区切って取得します。

String accountId = req.requestURI.substring(req.requestURI.lastIndexOf('/')+1);

公式のドキュメントに正にこのままの内容が載っていました。

Apex REST Basic Code Sample

JSON

返却するJSONの形式ですが、クラスの入れ子や、Listを活用することで
かなり自由度高く作成出来ます。

例えば、以下のようなJSONを返すとします。

1
2
3
4
5
6
7
8
9
"success":1,
"User" : {
  "user_id": xxx,
  "hobby":[
      {"name":"映画", "level":"3"},
      {"name":"サッカー", "level":"1"}
  ]
},
"request_time": "2015-3-27 12:33"

この場合、以下のようにクラスを複数作り、入れ子構造を作る事で作成出来ます。

1
2
3
4
5
6
7
8
9
10
11
12
13
global class UserData{
  global String user_id;
  global HobbyData hobby
}
global class HobbyData{
  global String name;
  global String level;
}
global class resultData{
  global Integer success;
  global UserData User;
  global String request_time;
}

作成するときは以下のような感じで。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
List<HobbyData> hobbies = new List<HobbyData>();
HobbyData hobby1 = new HobbyData();
hobby1.name = '映画';
hobby1.level = '3';
hobbies.add(hobby1);
HobbyData hobby2 = new HobbyData();
hobby2.name = 'サッカー';
hobby2.level = '1';
hobbies.add(hobby2);

UserData user = new UserData();
user.user_id = 'xxx';
user.hobby = hobbies;

resultData result = new resultData();
result.success = 1;
result.User = user;
result.request_time = '2015-3-27 12:33';

return result;

地道な作業にはなりますが、これでわりかし綺麗なJSONが返せました。
もっと簡単な方法があったらまた書きます。

   このエントリーをはてなブックマークに追加