web-dev-qa-db-ja.com

Spring Boot RESTパスマッピング

私はただ考えています、RESTサービスのPATHマッピングを作成するためのベストプラクティスは何ですか。次のパスがあるとしましょう。

/users POST
/users/1 PATCH, GET
/users/1/contacts GET, POST
/users/1/contacts/1 GET, PATCH

問題は、コントローラーを作成するためのベストプラクティスは何かということです。たとえば、これらすべてのマッピングを技術的に配置できるUserControllerがあります。または-個別のコントローラー(UserController、ContactsController)を作成する必要があります。 f.e以下のUserController、すべてを下に置く場合。

@RequestMapping("users")
@RestController
public class UserController {

    @RequestMapping(method = RequestMethod.POST)
    public ResponseEntity<Void> createUser() {}

    @RequestMapping(method = RequestMethod.GET)
    public User getUser() {}

    @RequestMapping(value = "{id}/contacts", method = RequestMethod.GET)
    public List<Contact> getContacts() {}

    @RequestMapping(value = "{id}/contacts", method = RequestMethod.POST)
    public ResponseEntity<Void> createContact() {}

    .....
}

また、個別のコントローラーを作成する場合、パスをどのように編成する必要がありますか?ばかげた質問かもしれませんが、誰かが経験を共有できれば嬉しいです。

7
comprex

ユーザーに関連するエンティティの数が将来増加することを提案しましょう。したがって、エンティティに従って分割する方がよいことは明らかです。

serController-> UserService-> UserRepository、

ContactController-> ContactService-> ContactRepository、

FriendshipController-> FriendshipService-> FriendshipRepository

私の経験から、ユーザーコントローラー

@RestController
@RequestMapping("/user")
public class UserController extends AbstractController {

...

   @RequestMapping(method = RequestMethod.POST)
   public ResponseEntity<?> createUser(@RequestHeader("X-Auth-Token") Optional<String> @RequestBody User user) {

...

   @RequestMapping(method = RequestMethod.GET)
   public ResponseEntity<?> listUsers(@RequestHeader("X-Auth-Token") Optional<String> authToken) {
...

ユーザースコープに関連するフレンドシップコントローラー:

@RestController
@RequestMapping("/user/{id}")
public class FriendshipController extends AbstractController {

...

@RequestMapping(value = "/friendship/code", method = RequestMethod.POST)
    public ResponseEntity<?> generateCodeForUser(@PathVariable("id") long id) {

...

 @RequestMapping(value = "/friendship/code", method = RequestMethod.GET)
    public ResponseEntity<?> retrieveCodeForUser(@PathVariable("id") long id) {

...

それが公理であるかどうかはわかりませんが、コードを整理するのを手伝ってください。

4
Sergii Getman