私はリレーショナルmysql DBを使用しているプロジェクトに取り組んでいます。私のテーブルは以下のとおりです。REST APIのURLとそのルータとコントローラ間の配布
- ユーザー
- 場所ノード/ Expressを使用
- 作物
簡素化されたコードの構造:
/routers
/routers/User.js
/routers/Location.js
/routers/Crop.js
/controlers
/controlers/UserController.js
/controlers/LocationController.js
/controlers/CropController.js
/models
/models/UserModel.js
/models/LocationModel.js
/models/CropModel.js
app.js
関係は、ユーザーができることです多くの場所を持つms)、場所には植えられた作物がたくさんあるかもしれません。
DB関係のものは、問題ありません。私の質問は、論理的に自分のコードを構造化する方法と、同時にRESTの原則を維持することです!
私はAPIの観点から、エンドポイントURLについて疑問に思っています。
現在、彼らは以下のとおりです。
ホスト名/ API /ユーザー/:ID - ユーザーアカウント
ホスト名/ API /ユーザー/:ID /場所 - ユーザーの場所
ホスト名/ api/user /:id/locations /:locationid - 特定のユーザーに所属する特定の場所に関する情報
ホスト名/ API /ユーザー/:ID /場所/:locationid /作物 - リスト特定のユーザー
に属している特定の場所に植えられているすべての作物は、このURLの構造は、残りの視点からOKですか?
、要求がAPIに受信された後、私は私の頭をラップカントはarroundの...私のルートを担当するべきルータとコントローラ、例:
ホスト名/ API /ユーザー/:ID /場所/:locationid
ユーザのルータとコントローラからこのURLを処理する必要がありますか? またはルータとコントローラの場所から?
URLには明らかに次のようなメッセージが表示されます。 "ユーザー:id、私の所在地:彼の所属するlocationidを見つけてください。"だから、未経験開発者としての私は、自動的にこのルートがユーザルータ内であることを前提としています
UserRouter.get(/:id/locations/:locationid, function(....){
UserController.getUserLocationById(:id, :locationid);
})
app.use('/user', UserRouter)
しかし、この方法で、私は、ENまでのすべての可能なURLを含むユーザー・ルータとなると思う:
/user
/user/:id
/user/:id/locations
...
...
/user/:id/crops
/user/:id/crops/:cropid
...
そして、他のルータやコントローラには何もありません。そして、私はこの事実だけが、私がREST APIのコード構造について間違って考えていると思うようにしています。
現在、/ user ....で始まるすべてのルートは、User Expressルータで処理され、上記の例のurlのUserController.getUserLocationByIdに渡されます。
しかし、私はこのようにミスをすると思います。
誰かが私の頭が痛むことを理解していたら、それを解決するのを手伝ってもらえますか?
よろしくお願いします。