【Salesforce】The requested resource does not exist
REST APIで一度の呼び出しで複数の命令を送る際に、compositeというものを使います。
しかし、Salesforceのアップデートがあったタイミングでエラーを返すようになりました。
その際のJSONはこんな感じです。
{
  "errorCode":"NOT_FOUND",
  "message":"The requested resource does not exist"
}
そんな命令は存在しませんって感じですね。
つい先日まで動いていたというのに、無慈悲なメッセージです。
ソースと送信していた命令を見比べていて気が付きました。
compositeのエンドポイントに設定していたAPIバージョンと、compositeRequest内で指定していたURLのAPIバージョンが異なるのです。
JSONの中身はこんな感じです。
{
  "compositeRequest" : 
  [
    {
      "method" : "POST",
      "url" : "/services/data/v42.0/sobjects/Account",
      "referenceId" : "refAccount",
      "body" : 
      {
        "Name" : "Sample Account"
      }
    },
    {
      "method" : "POST",
      "url" : "/services/data/v42.0/sobjects/Contact",
      "referenceId" : "refContact",
      "body" : 
      { 
        "LastName" : "Sample Contact",
        "AccountId" : "@{refAccount.id}"
      }
    }
  ]
}
compositeRequestのURLはv42.0が指定されています。
しかし、compositeのエンドポイントには「/services/data/v41.0/composite/」を指定していました。
compositeのエンドポイントのAPIバージョンは固定の文字列を設定しており、compositeRequestのAPIバージョンは取得したレコードのAPIバージョンを使っていました。
そのため、APIバージョンが食い違ってしまったわけですね。
古いAPIバージョンでも動くようですから、どちらも固定のバージョンにするか、compositeのバージョンをレコードに合わせる必要があります。
固定のバージョンにしてしまえば簡単でしょうかね。
No comments.