2

何がリソースで何がサブリソースかを判断する方法を知る必要があります。uri を作成する必要があるテーブルがいくつかあります。だから私は学生テーブルと学生クラス(学生が登録されているクラスの名前とおそらくいくつかの詳細を与える)テーブルを(N:1)で持っているとしましょう。

Student を主なリソースにして、以下のような uri をデザインします。

http://home/someapi/v1/student/1/

uri を構築するための残りのアプローチに従う

問題 1: StudentClassにアクセスするには、以下に示すどの URI を作成する必要がありますか?

1.http://home/someapi/v1/studentclass?studentid=1 or
2.http://home/someapi/v1/student/1/studentclass

学生クラスを別のリソースと見なす必要がありますか..?

問題 2:テーブル間に N:N の関係があると仮定すると、uri の設計はどうあるべきですか?

4

2 に答える 2

2

と の 2 つのリソースを扱うことをお勧めしstudentますclass

student次の URI を使用して取得できます。

http://home/someapi/v1/students/1

ここで複数形を使用することに注意してください。複数形を使用する理由については、http: //blog.apigee.com/detail/restful_api_design_plural_nouns_and_concrete_names/の記事をお読みください。

studentを 1 つの に登録できる場合class、それはこの学生のプロパティである可能性があるため、次の JSON ドキュメントを返すことができます (例):

{
  "student": {
    "id": 1,
    "firstName": "John",
    "lastName": "Doe",
    "class": {
      "id": 10,
      "name": "Room Y"
    }
  }
}

class次の URIで特定のものを取得できます。

http://home/someapi/v1/classes/10

次の URI を使用して、特定のクラスのすべての生徒を取得できます。

http://home/someapi/v1/classes/10/students

ここで、と の間にNN関係がある場合、JSON での表現に関する私の最初の提案が変更されます。実際には、リレーションはの埋め込みプロパティではなく、リソースのコレクションになるため、次の URI を使用する必要があります。studentsclassesstudentclassclassstudent

http://home/someapi/v1/students/1/classes

「生徒 #1 のすべてのクラスを取得する」という意味です。

classstudentリソースの両方を公開できます。2 つの異なることを説明しているため、どちらがメインかを決める必要はありません。/studentsとがあると、 とを/classes作成でき、それらをリンクすることができます。studentsclasses

?foo=bar最後に、フィルタリングの目的でクエリ パラメータ ( ) を使用することをお勧めします。

于 2012-08-27T14:58:52.477 に答える
0

クラスは学生間で共有できるため、StudentClass (または単に「クラス」) は別のリソースにする必要があると思います。したがって、この Uri はニーズに合っています。

http:home/someapi/v1/studentclass?studentid=1

于 2012-08-27T11:49:04.687 に答える