web-dev-qa-db-ja.com

RESTful APIのユーザー権限のレベル

インターネットでかわいい猫をランク付けしている会社があるとします。

/cats/でリソースを提供しています。これにより、ユーザーに最新のかわいい猫を提供します。

ユーザーは、支払いをまったく行っていないか、登録していない場合、上位3匹の猫だけを取得できます。彼らが337ドルを支払ってログインした場合の上位10匹の猫、および1337ドルを支払ってログインした場合の上位100匹の猫。リクエストを行うときに「ユーザー識別子」を持っています。

要するに、/cats/の消費者は、「ユーザーランキング」に基づいて異なる数の猫を取得します。消費側にユーザ​​ーIDがありますが、消費側のユーザーレベルを明示的に表していません。 ユーザーにサブスクリプションをアップグレードできることを通知しますリクエストを行うとき。つまり、3匹の猫3匹の猫しか提供していないので、区別する必要があります。許可されたユーザーレベル

消費者に十分な特権がないためにリソースを制限することと、それが消費者が持っているものだから制限することを区別するためのベストプラクティスは何ですか?

ランキングをアップグレードできるかどうかクライアントはどうやって知るのですか?つまり、theyがいないため、限られたリソースしか得られませんでしたt権限があります。ここでのベストプラクティスは何ですか?

これは実際のケースを大幅に簡略化したものです。また、明確にするために-読んでいただければ幸いです。


更新:

検討したオプションは次のとおりです。

  • ユーザーのアクセス許可オブジェクトをクライアントに1回格納し、アカウントのログインまたはアップグレードが実行されたときにのみクエリを実行します。
  • 存在することを示すJSONでnull値を渡しますが、実際のなしが転送されました。したがって、3匹の猫を持つユーザーの場合、10匹の猫は["Garfield","Sylvester","Puss in Boots",null*7]になります。
  • リソース許可ペアを渡す{cats:["Whiskers","Fluffy","Socks"],authCount:3}

可愛らしい猫を可能な限り最善の方法でお届けするために、これを初めて正しく行いたいと思います。

23

それはあなたの聴衆次第だと思います。

開発なし

あなたのオーディエンスが開発者のオーディエンスでない場合、私は次の方法で行きます:

例のためにJSONを返すとしましょう。

GET /cats HTTP/1.1

{
    "cats": [
        "Can I haz cheeseburger",
        "If it fits, I sits",
        "It's caturday!"
    ],
    "permissions": {
        "level": "free",
        "information": "You have access to 3 cats. Upgrade to ... to get 10 cats!"
    }
}

または似たようなもの。

ユーザーが自分のアカウントのステータスを知ることは有益であり、マーケティングメッセージなど、必要な情報を入力することができます。この方法の最も重要な点は、現在のアカウントのユーザーにいくつかの簡単な可視性を提供することです。

Dev

しかし、もしあなたの聴衆が純粋に開発者であるなら、私は言うでしょう:完全なHTTP準拠の方法で行ってください。メタデータを保存するには、HTTPヘッダーを使用します。

次に例を示します。

GET /cats HTTP/1.1

X-Account: anonymous
X-Account-Possible-Upgrades: 2
X-Account-Limit: 3

次に、これらのヘッダーの意味を明確に文書化します。ほとんどの開発者は、これらのカスタムヘッダーが表示されたときに、特に制限が発生している場合は、ドキュメントに直接アクセスします。さらに進んで、ヘッダーにリンクを表示できます。または、価格設定ページへのリンクを表示できます。

X-Account-Doc: http://your/doc

しかし、繰り返しになりますが、多くの開発者はHTTPの仕組みを知りません。

だからあなたの電話です

1つはより正確で、もう1つはよりアクセス可能です。

その他

あなたの質問に関連するいくつかの他の雑多なもの:

18

ランキングをアップグレードできるかどうか、クライアントはどうやって知るのですか?

それはクライアントに依存します。通常、このような情報は、ハイパーテキストメッセージ(別名HTML)の形式でRESTメソッドの応答本文に含めることができます。ただし、REST = APIはHTMLクライアントで使用されます。

XMLとJSONについても同様です。


編集: API(この頭字語を展開)の使用と、アカウントタイプ/ユーザープランのマーケティングを混同する場合があります。私はこれを混ぜるつもりはありません。それは常にうんざりするからです(ビジネス上の決定では、ソフトウェアの変更よりも迅速な変更が必要になる場合があります。これらの変更は、Platterに間に合うため、異なる応答を伝えるためです)。

代わりに、別のチャネル(たとえば、ニュースレターで彼らの利点は何ですか。

これは、サービスにサインアップする人がAPIに対してプログラミングしている人ではない場合に特に効果的です。例えば:

ジョージ(愛情のある36歳の子猫を誇りに思うゲイの男性)は、cute-cats-4-me.comへのアクセス権を購入し、16歳の配偶者(Linuxを含むスクリプトコンピューターシステムに優れている)に、アパートの壁に素敵なかわいい子猫を表示するデジタルサイネージアプリケーション。

したがって、これをプログラミングして楽しんでいる人は、実際には情報の最も直接的な宛先ではありません。

または、ログインとユーザー情報メソッドに応じて、すべての詳細を提供します。

ただし、ユーザーがプログラムで猫をリクエストする場合、猫が3匹以上しか戻ってこない理由を知っている必要があります。しかし、この通信問題はコードでは解決できません。

それ以外の場合は、さらにクエリを実行できるようにし、権限が十分でない場合は失敗の通知を返します。しかし、繰り返しになりますが、それはユーザーフレンドリーなソフトウェアではありません。

4
hakre