PHPでREST APIをゼロから構築していますが、これはうまく機能していますが、今はヘッダーに関連するキャッシュを処理したいので、持ってる。以前にキャッシュされたレスポンスの部分的な更新
レストサービスのすべてのエンティティはデータベーステーブルにリンクされており、私が使用しているアプローチはすべてのテーブルの作成/更新されたフィールドなので、すべてのリソース要求に "Last-modified"ヘッダーを提供できます。私だけが要求を処理しますどのように、これは応答を生成するコードの一部である、と私はそれをより明確にするために、ヘッダ
switch(strtolower($requestMethod)){
...
case "get":{
if ($resourceId){
$this->resource = $resourceType::byId($resourceId);
if (!$this->resource){
$this->responseCode = 404;
}
else{
$this->responseBody = json_encode($this->resource);
$this->responseCode = 200;
$this->responseHeaders["Content-Type"] = "application/json; charset=UTF-8";
}
}
else{
$this->responseBody = json_encode($resourceType::find($this->requestData));
$this->responseCode = 200;
$this->responseHeaders["Content-Type"] = "application/json; charset=UTF-8";
}
}
break;
...
}
を「最終更新日」を追加する予定のそれを明確にする
/api/products/products/products/products/index.htmlのようなリクエストがあります。
キャッシュのために、$ resourceIdが存在する場合は、単に "Last-modified"ヘッダーを最後に更新されたタイムスタンプ。
$ resourceIdがない場合は、コレクション内で最も更新されたタイムスタンプをクエリし、最後に変更したヘッダーとして配置します。
この最後のポイントは私が問題があるところです。データベースに20000の製品があり、1つの製品の価格を更新するとしましょう。これは、更新後にapi/productsへのリクエストがデータの1バイトだけが変更されているにもかかわらず、20000個のアイテムを再度取得しなければならないことを意味し、ブラウザにフェッチすべきことを伝える方法があるかどうかを知りたいレコードを1つだけ作成し、そのキャッシュを更新します。
初めてのRESTサービスです。投稿したコードのアドバイスは大歓迎です。
ありがとうございます。
申し訳ありませんが、私は私が尋ねた質問にどのように役立つか分かりません。キャッシュされたものはすでに完了しており、うまく動作しています。また、更新されたレコードを簡単に識別できます。クライアントキャッシュの部分的な更新はできません。 – sergio0983