3

私は、ソフトウェアのライセンスを取得するために、しばらく前にWebアプリを開発しました。これには、顧客、アカウント、ユーザー、およびライセンスがあります。ライセンスはユーザーに割り当てられ、シリアル番号でアクティブ化されます。ライセンスは、発注書の処理の出力として作成されます。つまり、新しいライセンスをPOSTする直接的な方法はありません。

私は現在「RESTfulWebサービス」を読んでいて、それをどのようにRESTfulにするかを考えています(HATEOASも)。

ほとんどのURLは明確ですが、ライセンスにはいくつかの興味深いアクションが必要です。ライセンスの基本URLはです/licence/{licenceID}

  • 使用可能なライセンスをユーザーに割り当てます(サポートスタッフが行います)
  • ユーザーからライセンスを解放します(使用可能なライセンスのプールに戻します)
  • シリアル番号を使用してライセンスをアクティブ化し、代わりにキーを生成します
  • ライセンスを再アクティブ化する
  • ライセンスを新しい有効期限に更新します
  • ライセンスを無効にします。一方向のみで、元に戻すことはできません。ライセンスはまだ存在します

現在、RESTでは標準的なメソッドしか使用できず、「割り当て」というアクションをURLに埋め込んではいけません。私が考えているのは、影響を与えたいライセンスの部分を選択することです。これは与える: -

  • リスト:GET /licences/
  • 得る:GET /licences/{licenceID}
  • 割当:POST /licences/{licenceID}/assignee/{userID}
  • リリース:DELETE /licences/{licenceID}/assignee
  • 活性化:POST /licences/{licenceID}/serialNumber/{serialNumber}
  • 非アクティブ化:DELETE /licences/{licenceID}/serialNumber
  • 更新:POST /licences/{licenceID}/expires
  • 無効にする:DELETE /licences/{licenceID}/enabled

私の質問は:-

  • このURLスキームは、それを行うための「正しい」または賢明な実践的な方法ですか?
    • または、「ライセンスの割り当て」と「ライセンスのアクティブ化」のコレクションが必要です(例/assignments/{licenceId}/{userId}:)
  • 私は何か基本的なものが欠けていますか(本を読み終えたときに明らかになるかもしれません)
  • パラメーター(userIdおよびserialNumber)は、パスパラメーターまたはクエリパラメーターとして使用する必要がありますか?
    • {userId}はシステム上のユーザーを参照しているため、パスパラメーターになる可能性があります
    • {serialNumber}は、クライアント(Java Swing)で独自の情報(シリアル番号の中央DBはありません)から生成されます。

どうもありがとう!

4

1 に答える 1

2
  • リスト:GET /licences/

結構ですが、私は自分自身を使用しますGET /licences:)

  • 得る:GET /licences/{licenceID}

いいね

  • 割当:POST /licences/{licenceID}/assignee/{userID}

ライセンスが複数のライセンシーに割り当てられない限り、これは逆効果だったと思います。代わりに、私は提案します

PATCH /licences/{licenceID}
{ assignee={userID} }

また

PUT /licences/{licenceID}/assignee
{userID}

どちらを選択するかは、ライセンスの譲受人が変更する頻度によって異なります。頻繁に使用する場合は後者のオプションを使用し、まれに使用する場合は前者を使用します。

  • リリース:DELETE /licences/{licenceID}/assignee

良い。ただし、これを使用する場合は、前に示した2つのストレージオプションの2番目を使用する必要があります。最初のものを選択した場合は、次のようになります。

PATCH /licences/{licenceID}
{ assignee=NULL }
  • 活性化:POST /licences/{licenceID}/serialNumber/{serialNumber}
  • 非アクティブ化:DELETE /licences/{licenceID}/serialNumber
  • 更新:POST /licences/{licenceID}/expires

これらの3つは、クライアントにとって物事を簡単にするために、担当者が決定したのと同じように扱うことができます。

  • 無効にする:DELETE /licences/{licenceID}/enabled

私は提案します:

> DELETE /licences/{licenceID}
< 201 Created
< Location: /disabled-licenses/{licenseID}

次に、URI名前空間/licensesはドメインモデルにマップされlicenses WHERE valid==true、/disabled-licensesはにマップされlicenses WHERE valid==falseます。それは何も悪いことではありません。無効なライセンスへのアクセスは、アプリケーションレベルではなく(データベースのフィールド値をチェックすることにより)HTTPレベル(つまりURIパス)で制限できます。

私の質問は:-

  • このURLスキームは、それを行うための「正しい」または賢明な実践的な方法ですか?
    • または、「ライセンスの割り当て」と「ライセンスのアクティブ化」のコレクションが必要です(例/assignments/{licenceId}/{userId}:)

提案されたスキームは、いくつかの変更を加えたものがほとんどです。

  • 私は何か基本的なものが欠けていますか(本を読み終えたときに明らかになるかもしれません)

いいえ、そうではありません。

  • パラメーター(userIdおよびserialNumber)は、パスパラメーターまたはクエリパラメーターとして使用する必要がありますか?
    • {userId}はシステム上のユーザーを参照しているため、パスパラメーターになる可能性があります
    • {serialNumber}は、クライアント(Java Swing)で独自の情報(シリアル番号の中央DBはありません)から生成されます。

この場合も、ライセンスに1つのユーザーIDと1つのシリアル番号しかない場合、それらの値はリソースプロパティまたはサブリソース、あるいはその両方です。サブリソースとしてモデル化されている場合、それらはURIに属し、プロパティの場合は本体に属します。

于 2012-12-04T14:40:26.973 に答える