0

PHP の REST エンドポイントからアクセスして、いくつかのアプリケーション API (Facebook、Twitter、Instagram など) からのデータを使用するアプリがあります。

http://www.myapp.com/usernameなど、アプリ ユーザー用のバニティ URL を作成しています

データベースがあれば、データベースからユーザー データを取得して、ユーザー ページに表示できます。

REST サービスでは、URL にアクセスするたびに、メインの Web サイトから情報を取得する API が呼び出されます。

アプリは検索エンジンのクローラーから大量のトラフィックを受け取るため、問題は大きくなっています (クロール レートを下げるつもりはありません)。

第 1 の問題: API は制限されたアクセス (1 時間あたり 2000 クエリ) を提供するため、API 呼び出しをスキップする方法 (たとえば、memcache を使用) はありますか?

2 番目の問題: バニティ URL を作成したいので、http://www.myapp.com/usernameを呼び出すたびに、API を呼び出してユーザー ID を取得し、次にユーザー名を取得する必要があります。これが正しい方法かどうか疑問に思いますこれを行うには、ほとんどの Web サイトで URL の書き換えが行われますが、内部データベースではなく外部データがある場合、どのように対処すればよいでしょうか?

読んでくれてありがとう、助けが必要です!

4

2 に答える 2

0

ある種のフレームワークを使ってみてください。ルーティングがはるかに簡単になるはずです。

URLの書き換えはvi.htaccessで行われるため、ユーザーにはURLの書き換えが表示されません。

私が考えることができる2つの方法は次のとおりです。

  1. 定義したすべてのルートが変更されないように.htaccessを書き直し、他のすべての場合(つまり、http://www.example.com/username)、ユーザーコントローラーメソッドがユーザー名とURLの間に挿入されます。

  2. 既知のすべてのルートが処理されるようにルートを定義し、デフォルトのルートがユーザーIDを把握し、必要なすべてのことを実行するようにします。

キャッシュの場合は、memcache / redisを使用して、クエリ/ユーザーオブジェクト/その他の頻繁にアクセスされるものをキャッシュします。

于 2013-02-05T16:07:16.797 に答える
0

memcacheの使用に関して、発生する大きな問題は、キャッシュデータの検証と期限切れです。

次のように実装するとします。

function getSomeData() {
    if (Memcache::has('key-for-data')) {
        return Memcache::get('key-for-data');
    } else {
        $data = RestApi::getData();
        Memcache::put('key-for-data', $data);
        return $data;
    }
}

これは十分に理にかなっているようですが、REST APIに他の方法でアクセスするとどうなりますか?(同じAPIにデータをPOSTする別のサードパーティアプリのように)。そうすると、キャッシュされたデータが無効になる可能性があり、あなたはそれについて知ることができなくなります。

アプリケーションの観点からは、基盤となるデータストアへの変更は完全にランダムであり、さらに完全に不透明で不明であるため、キャッシュの対象としては適していません。

一方、データが更新されるたびにサービス(サブスクリプションサービスなど)から何らかの「プッシュ」通知を受け取ることができる場合は、これをトリガーとして使用して、関連するキャッシュエントリを無効にすることができます。ただし、これはさらに複雑であり、両端でサポートする必要があります。

申し訳ありませんが、これは実際には答えではありませんが、部分的な答えであり、コメントするには長すぎました:-)

于 2013-02-05T16:05:07.900 に答える