Лучший подход к созданию конечных точек для RESTful API в java с использованием Spring - PullRequest
1 голос
/ 08 мая 2020

Я новичок в этой области, пытаюсь создать API с использованием Spring с зависимостями Maven, такими как Project Lombok, просто чтобы получить больше практических навыков в моем обучении.

Итак, мне удалось написать несколько код для запуска приложения, и теперь я создаю несколько конечных точек. Первым из них был тип «список пользователей», с которым мне помог мой брат, он разделен на 3 класса, которые я перечислю ниже:

(1) UserListResponse. java:

package com.tropicalia.meu_cardapio.api.user.list;

import lombok.Data;

@Data
public class UserListResponse {

    private Long id;

    private String name;

    private String email;

}

(2) UserListRest. java

package com.tropicalia.meu_cardapio.api.user.list;

import com.tropicalia.meu_cardapio.domain.user.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/users")
public class UserListRest {

    @Autowired
    UserListService service;

    @GetMapping
    public ResponseEntity<List<User>> list() {
        return ResponseEntity.ok().body(service.listUsers());
    }
}

(3) UserListService. java

package com.tropicalia.meu_cardapio.api.user.list;

import com.tropicalia.meu_cardapio.domain.user.User;
import com.tropicalia.meu_cardapio.domain.user.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserListService {

    @Autowired
    UserRepository repository;

    public List<User> listUsers() {
        List<User> list = repository.findAll();
        return list;
    }
}

Причина, по которой я пишу этот пост, заключается в том, что Я не знаю, как создать другие конечные точки, такие как «создать пользователя», и я даже не знаю, с чего начать свое исследование, был бы очень благодарен, если бы кто-нибудь мог мне помочь с некоторыми советами здесь.

Ответы [ 2 ]

1 голос
/ 08 мая 2020

Один из подходов, которые я использую, - сгруппировать контроллер в так называемые ресурсы, например:

  • User Resource
  • Book Resource et c

Затем вы можете создать один контроллер с именем UserController с сопоставлением на уровне контроллера и некоторыми конкретными c сопоставлениями на уровне метода, например:

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

    @GetMapping
    public ResponseEntity<List<UserDto>> getUsers(){}

    @GetMapping("/{id}")
    public ResponseEntity<UserDto> getOneUser(@PathVariable Long id){}

    @PostMapping
    public ResponseEntity<UserDto> addUser(@RequestBody UserDto user){}

    @PutMapping("/{id}")
    public ResponseEntity<UserDto> updateUser(@PathVariable Long id, @RequestBody UserDto user){}

}

Затем вы можете использовать уровень службы / репозитория с весенними данными JPA для чтения / сохранения ваших данных. Хорошей отправной точкой являются направляющие пружины, например:

0 голосов
/ 08 мая 2020

Прежде всего, может быть, лучше просто определить больше общих c конечных точек, а не UserList, обычно лучше просто определить конечную точку User и добавить туда все методы и маршруты, такие как listUsers или getUser, addUser ...

Кроме того, когда вы используете @Repository, он генерирует базовые c методы для «добавления, удаления или обновления» вашего объекта.

Например, вы можете определить внутри своей службы

public User saveUser(User user) {
    if (user != null) {
        return repository.save(user);
    } else {
        return null;
    }
}

И в вашем контроллере:

@PostMapping("/addUser")
public User addUser(@Valid @RequestBody User user) {

    user newUser = service.saveUser(user);

    return newUser;
}

Скажите, если у вас есть еще сомнения. : D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...