0

Google App Engine で実行される RESTful Web サービスがあり、JPA を使用してエンティティを GAE データ ストアに格納します。

新しいエンティティは、POST 要求を使用して作成されます (サーバーがエンティティ ID を生成するため)。

ただし、GAE DS は結果整合性があるため、どのステータス コードを返すのが最適かはわかりません。私は次のことを検討しました:

  • 200 OK: RFC は、応答本文に「アクションの結果を記述または含むエンティティ」を含める必要があると述べています。これは、エンティティが DS に永続化されるときに生成された ID で更新されるため、実現可能です。したがって、更新されたエンティティをすぐにシリアル化して返すことができます。ただし、すべてのノードがまだ整合性に達していない可能性があるため、ID によるそのエンティティに対する後続の GET 要求は失敗する可能性があります (これは、私のクライアント アプリケーションの実際の問題として観察されています)。
  • 201 Created: 上記のように、一貫性がまだ達成されていない場合、新しいエンティティの URI を返すと、クライアントの問題が発生する可能性があります。
  • 202 Accepted: 上記の問題は解消されますが、新しいエンティティの ID をクライアントに通知することはできません。

このシナリオでベスト プラクティスと見なされるのはどれですか?

4

2 に答える 2

2

A get by key will always be consistent, so a 200 response would be Ok based on your criteria unless there is a problem in google land. Are you certain you observed problems are from gets rather than queries. There is a difference between a query selecting a KEY vs a GET by key.

For a query to be consistent it must be an ancestor query, alternately a GET is consistent, anything else may see inconsistent data as indexes have yet to be updated.

This is all assuming there isn't an actual problem in google land. We have seen problems in the past, where datacenters where late replicating, and eventual consistancy was very late, sometimes even hours.

But you have no way of knowing that, so you either have to assume all is OK, or take an extremely pessimistic approach.

于 2014-04-08T10:37:30.167 に答える
0

使用している JSON REST プロトコルによって異なります。常に json オブジェクトを返すだけでは、あまり RESTful ではありません。

これらのいくつかを見る必要があります。

質問に答えるには: リソース自体がその URL を認識している形式を使用したいので、201 を使用しますが、リソース全体も返します。

最も簡単な方法は、便利な URL スキーマで jsonapi を使用することです。これにより、ID を知っているため、URL でリソースを見つけることができます。

于 2014-04-08T10:16:53.160 に答える