(開発者向け)REST API コール時にはURLエンコードを意識しましょう
この記事の内容は、Marketo REST API を使ってMarketo と連携させる開発者(パートナー含む)向けになります。
API とかHTTPリクエスト/レスポンスとかの単語を聞いてアレルギーが出ちゃう人は、読まなくても大丈夫です。もし社内にMarketo連携の開発者がいれば、転送してあげてください。
REST API をコールしたけどエラーが出てしまう、あるいは正しい結果が返ってこないといったお問い合わせをサポートにいただくことがあります。
もちろん理由は様々なのですが最近よく見かけるパターンとして、API のエンドポイントとして指定するURLに含めるパラメータを正しくエンコードしていない場合があるようです。
URLのエンコードはパーセントエンコーディングとも呼ばれたりしますが、ここでは詳しく述べません。
Wiki ペディアあたりをご参照ください。
また、実際に各文字がどのようにエンコードされるかは、以下のサイトで試せます。
http://urlencode.net/result.cgi
ここではMarketo のREST APIを呼ぶ際のよくある事例をいくつか挙げてみます。
- URL(パラメータ)に半角スペースを含む
例えば、getFolderByName というAPI があります。これはフォルダ名をキーにフォルダ情報を取得できるもので、パラメータとしてname=<フォルダ名> を指定します。この時フォルダ名に半角スペースを含む場合は、正しくエンコードする必要があります。半角スペースは、%20になります。フォルダ名が”Nitta PM” であれば、”Nitta%20PM” となります。 - URL(パラメータ)に日本語を含む
1と同じ例で、getFolderByName API の nameパラメータに、日本語フォルダ名を指定する際にもエンコードの必要があります。例えば、「マルケト」というフォルダ名であれば、「%83%7D%83%8B%83P%83g」となります。 - URL(パラメータ)に + を含む
アクティビティログを取得するAPI を使う際に、前準備としてページングトークンというのを取得しておく必要があります。
具体的には、getActivitiesPagingToken API を使うわけですが、これは sinceDatetime というパラメータで、日時を指定する必要があります。この日時指定でタイムゾーン情報を含めて指定する場合、タイムゾーンによっては + 記号を使わなければいけません。日本時間はまさにそれにあたるのですが、例えば日本時間で 2018/01/20 13:00:00 を指定する場合は、"2018-01-20T13:00:00+09:00” という値になります。この時 + 記号のまま指定して送ると正しいタイムゾーン情報が送られないので、エンコードをしてあげる必要があります。
先ほどの例だと、"sinceDatetime=2018-01-20T13:00:00%2B09:00” としてあげることで期待通りに動くようになります。
ここで挙げたのは一例ですが、API を呼ぶ際にはURLにはそのまま使えない文字が含まれる可能性があること、そういった文字はエンコードする必要があること、を意識してプログラムを開発していただければ幸いです。Happy Encoding!