(開発者向け)REST API コール時にはURLエンコードを意識しましょう | Community
Skip to main content
Tatsuya_Nitta
Level 2
January 26, 2018

(開発者向け)REST API コール時にはURLエンコードを意識しましょう

  • January 26, 2018
  • 0 replies
  • 89 views

この記事の内容は、Marketo REST API を使ってMarketo と連携させる開発者(パートナー含む)向けになります。

API とかHTTPリクエスト/レスポンスとかの単語を聞いてアレルギーが出ちゃう人は、読まなくても大丈夫です。もし社内にMarketo連携の開発者がいれば、転送してあげてください。

REST API をコールしたけどエラーが出てしまう、あるいは正しい結果が返ってこないといったお問い合わせをサポートにいただくことがあります。

もちろん理由は様々なのですが最近よく見かけるパターンとして、API のエンドポイントとして指定するURLに含めるパラメータを正しくエンコードしていない場合があるようです。

URLのエンコードはパーセントエンコーディングとも呼ばれたりしますが、ここでは詳しく述べません。

Wiki ペディアあたりをご参照ください。

また、実際に各文字がどのようにエンコードされるかは、以下のサイトで試せます。

http://urlencode.net/result.cgi

ここではMarketo のREST APIを呼ぶ際のよくある事例をいくつか挙げてみます。

  1. URL(パラメータ)に半角スペースを含む
    例えば、getFolderByName というAPI があります。これはフォルダ名をキーにフォルダ情報を取得できるもので、パラメータとしてname=<フォルダ名> を指定します。この時フォルダ名に半角スペースを含む場合は、正しくエンコードする必要があります。半角スペースは、%20になります。フォルダ名が”Nitta PM” であれば、”Nitta%20PM” となります。

  2. URL(パラメータ)に日本語を含む
    1と同じ例で、getFolderByName API の nameパラメータに、日本語フォルダ名を指定する際にもエンコードの必要があります。例えば、「マルケト」というフォルダ名であれば、「%83%7D%83%8B%83P%83g」となります。

  3. 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!

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.