如何解决使用springboot中的rest api,架构问题
我想用springBoot MVC编写REST API客户端。客户端将向API发送数据请求,并将其显示在浏览器中。例如,我将http://example.com/showItems映射到itemsController.show方法,并由item.html(百里香叶)模板呈现。
我的问题是在哪里放置API调用以及如何处理API响应。 我在考虑设计,而不仅仅是使它起作用。还要想象一下,我想扩展到许多返回不同对象的API调用。
我正在考虑几种选择:
- 控制器内部的WebClient。控制器处理返回项目Object的API调用。
- item类负责API调用。并可能调整结果以进行渲染。不同的对象具有不同的API调用。也许所有人都注入了相同的WebClient
- 我创建一个包含“ DAO”的itemService,这是一个调用API并返回item对象的itemDAO。类似于DAO存储库+模型。
我不确定采用哪种解决方案。在春季或其他设计模式中,还有其他常用的方法吗?或者每种解决方案的利弊是什么?
解决方法
有很多方法可以在春季启动时遵循MVC的结构 在这里,我有一个解决方案,您可以在其中进行后续操作
这是我的文件结构
UserController 和@RestController //所有获取和发布Apis呼叫
UserService 和@Service //在此处定义业务逻辑
UserRegistrationReqBean @Data //用于龙目岛并减少样板
UserMaster @Entity //对于表架构
-
UserMasterRepo @Repository //用于Jpa查询
-
UserMasterDao //与服务层交互以进行数据库查询的界面
- UserMasterDaoImpl @Component //用于Dao接口定义
-
首先创建一个控制器类(例如我正在使用用户管理系统)
@RestController
@RequestMapping("/v1.0")
public class UserController {
@Autowired
UserService userService;
@GetMapping("/getUsers")
public List<UserMaster> getUsers() {
return userService.getUsers();
}
@PostMapping("/registerUser")
public UserMaster registerUser(@RequestBody RegisterUserReqBean reqBean) {
return userService.registerUser(reqBean);
}
// @PostMapping("/updateUser")
// public UserMaster updateUser() {
// UserMaster updatedUser = new UserMaster();
// return updatedUser;
// }
}
创建完控制器后,需要使用@Service
注释在服务层中定义其业务逻辑
@Service
public class UserService {
@Autowired
UserMasterDao userMasterDao;
public List<UserMaster> getUsers() {
List<UserMaster> listOfUser = userMasterDao.findAll();
return listOfUser;
}
public UserMaster registerUser(RegisterUserReqBean reqBean) {
UserMaster userMaster = new UserMaster(reqBean);
UserMaster updatedUserMaster = userMasterRepo.save(userMaster);
return updatedUserMaster;
}
// public UserMaster updateUser() {
//
// }
}
创建带有@Repository批注的Repo类以进行一些与数据库相关的更改
import org.springframework.data.jpa.repository.JpaRepository;
import com.sample.user.entity.UserMaster;
@Repository
public interface UserMasterRepo extends JpaRepository<UserMaster,Integer> {
//you can create your own JPA queries here
}
这里的存储库为空,因为我正在使用其预定义的查询
than使用带有@Entity
批注的实体类来定义数据库表架构
使用 Maven Lombok依赖来减少Entity中的样板代码并请求Bean
@Entity
@Data
@Table(name = "kd_user_master")
public class UserMaster {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Integer userId;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "user_name")
private String userName;
@Column(name = "email")
private String email;
@Column(name = "mobile_number")
private String mobileNumber;
@Column(name = "password")
private String password;
@Column(name = "country")
private String country;
@Column(name = "created_at")
private Date createdAt;
@Column(name = "updated_at")
private Date updatedAt;
//this parameterized cunstructer is used for having new object of userMaster //schema so we can directly save it to db
public UserMaster(RegisterUserReqBean reqBean) {
super();
this.firstName = reqBean.getFirstName();
this.lastName = reqBean.getLastName();
this.userName = reqBean.getUserName();
this.email = reqBean.getEmail();
this.mobileNumber = reqBean.getMobileNumber();
this.password = reqBean.getPassword();
this.country = reqBean.getCountry();
this.createdAt = new Date();
this.updatedAt = new Date();
}
}
然后我们将创建一个DAO(数据访问对象)接口及其实现类
public interface UserMasterDao{
UserMaster save(userMaster user);
List<UserMaster> findAll();
}
其实施类
public class UserMasterDaoImpl implements UserMasterDao{
@Autowired
UserMasterRepo repo;
@Override
UserMaster save(UserMaster user){
return repo.save(user);
}
@Override
List<UserMaster> findAll(){
return repo.findAll();
}
}
在业务逻辑和数据库模式之后,我们需要为后请求定义Request bean,因为它不允许我们请求参数,或者我们可以说查询参数
@Data
public class RegisterUserReqBean {
private String firstName;
private String lastName;
private String userName;
private String email;
private String mobileNumber;
private String password;
private String country;
private Date createdAt;
private Date updatedAt;
}
我们正在控制器类和服务类中使用此请求bean进行用户注册
,通常,所有业务逻辑和任何API调用都应在Service层中完成。您应该在配置类中配置另一个服务bean,并在服务层(适当的mvc架构)中进行调用,一旦获得响应,就可以根据需要对其进行更改,然后将其返回给控制器。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。