2017-03-22 3 views
2

API応答キャッシュでAPIMのパフォーマンスをテストしました。 結果は私の予想と少し違っていました。 のようになります。HTTPレスポンスステータスコードでAPIレスポンスキャッシュを設定するには?

最初のAPIは、APIサービスからAPIゲートウェイを介して404応答ステータスコードを取得する必要があります。 私は、2番目のレスポンスがAPIレスポンスキャッシュの404レスポンスステータスコードであると考えました。 しかし、同じレスポンスボディで200レスポンスステータスコード(最初のレスポンスコードとは異なります)が返されました。

私はWSO2文書から以下のような注意を読みました。

キャッシュメディエータは、HTTP応答の応答ステータスコードをキャッシュテーブルにキャッシュしません。代わりに、キャッシュヒットに「200 OK」ステータスコードを返します。これはデフォルトのリクエスト成功ステータス応答です。リクエストがキャッシュヒットを取得したときに別のステータスコードを返す場合は、onCacheHitシーケンスでレスポンスステータスコードを更新できます。

私は何を意味するのか理解していましたが、私はそれをどうするか考えていません。 キャッシュ・メディエーション、特にメディエーション・シンタックスを扱うのは私のエリアではありません。

APIレスポンスキャッシュをHTTPレスポンスステータスコードと連携させたい。 誰かが私のために案内できますか?

答えて

1

この問題を解決する独自の方法が見つかりました。
これは間違っている可能性がありますが、意図したとおりに機能します。
(HTTPレスポンスコードが200、GETメソッドの場合、APIレスポンスキャッシュが機能します)

velopcity_templete.xmlファイルを編集しました。

<inSequence> 
    ... 
    ## check and set response caching 
    #if($responseCacheEnabled) 
    #if($resource.getMethodsAsString() == 'GET') 
    <cache scope="per-host" collector="false" hashGenerator="org.wso2.caching.digest.REQUESTHASHGenerator" timeout="$!responseCacheTimeOut"> 
     <implementation type="memory" maxSize="500"/> 
    </cache> 
    #end 
    ... 
</inSequence> 

<outSequence> 
    <class name="org.wso2.carbon.apimgt.usage.publisher.APIMgtResponseHandler"/> 
    ## check and set response caching 
    #if($responseCacheEnabled) 
    #if($resource.getMethodsAsString() == 'GET') 
    <filter regex="200" source="$axis2:HTTP_SC"> 
      <then> 
       <cache scope="per-host" collector="true"/> 
      </then> 
     </filter> 
    #end 
    #end 
    <send/> 
</outSequence> 

誰かがよりよく標準的な方法を持っていれば、私にとって非常に役立ちます。

関連する問題