在这篇文章中,我们将使用spring boot和容器化MongoDB创建RESTful API。
什么是RESTful API、SpringBoot和容器化MongoDB?
在本节中,我们将了解REST API、SpringBoot和容器化MongoDB的术语
RESTful API
REST API(也被称为RESTful API)是一种符合REST架构约束的应用编程接口。REST是代表状态转移的意思。REST已迅速成为在网络上构建Web服务的事实标准,因为它们易于制作,易于消费。
Spring Boot
Spring Boot是一个开源的基于Java的框架,用于创建一个微型服务。它提供了一个良好的平台,可以开发一个独立的、生产级的Spring应用,你可以直接运行。大多数Spring Boot应用程序需要最小的Spring配置。
特点
- 创建独立的Spring应用程序
- 嵌入Tomcat
- 自动配置Spring和第三方库
- 需要最小的Spring配置
容器化的MongoDB
MongoDB是一个文档数据库,具有你想要的可扩展性和灵活性,以及你需要的查询和索引功能。MongoDB将数据存储在灵活的、类似JSON的文档中。文档模型映射到你的应用程序代码中的对象,使数据易于操作。Docker容器是一个包含应用程序及其所有必要配置或依赖的单一单元。MongoDB可以在容器中运行。
Maven的依赖性
pom.xml文件将如下所示
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>io.knoldus</groupId>
<artifactId>MongoDB-SpringBoot-Rest-API</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>MongoDB-SpringBoot-Rest-API</name>
<description>Project for </description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
模型类
在这个类中,我们将用 **@Document**注释。
课程对象的POJO结构
package io.knoldus.course;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
@Document
public class Course {
@Id
private String id;
private String name;
private String description;
public Course() {
}
public Course(String id, String name, String description) {
this.id = id;
this.name = name;
this.description = description;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
控制器类
在这个类中,我们将用 **@RestController**注解。因此,它将处理我们的网络请求。
package io.knoldus.course;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Optional;
@RestController
public class CourseController {
@Autowired
private CourseService courseService;
@RequestMapping("/courses")
public List<Course> getAllCourses() {
return courseService.getAllCourses();
}
@RequestMapping("/courses/{id}")
public Optional<Course> getCourse(@PathVariable String id) {
return courseService.getCourse(id);
}
@RequestMapping(method = RequestMethod.POST, value = "/courses")
public void addCourse(@RequestBody Course course) {
courseService.addCourse(course);
}
@RequestMapping(method = RequestMethod.PUT, value = "/courses/{id}")
public void updateCourse(@RequestBody Course course) {
courseService.updateCourse(course);
}
@RequestMapping(method = RequestMethod.DELETE, value = "/courses/{id}")
public void deleteCourse(@PathVariable String id) {
courseService.deleteCourse(id);
}
}
存储库
这个接口扩展了MongoRepository接口,因为我们使用MongoDB来保存数据。
package io.knoldus.course;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface CourseRepository extends MongoRepository<Course, String> {
}
应用程序.属性
我们将在资源文件夹下创建这个文件。该文件将包含MongoDB连接参数。
spring.data.mongodb.authentication-database=user-value
spring.data.mongodb.username=user-username
spring.data.mongodb.password=user-password
spring.data.mongodb.database=user-dbname
spring.data.mongodb.port=27017
spring.data.mongodb.host=localhost
spring.data.mongodb.auto-index-creation=true
Docker文件
在你的项目目录的根部创建docker-compose.yml。使用官方镜像配置并安装MongoDB和Mongo Express。
version: "3.3"
services:
# MongoDB Service
mongodb:
image: mongo:latest
container_name: mongodb
restart: unless-stopped
environment:
MONGO_INITDB_ROOT_USERNAME: user_username
MONGO_INITDB_ROOT_PASSWORD: user_password
ports:
- 27017:27017
volumes:
- ./database-data:/data/db
# Mongo Express Service
mongo-express:
image: mongo-express:latest
container_name: mongo-express
restart: unless-stopped
ports:
- 8081:8081
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: user_username
ME_CONFIG_MONGODB_ADMINPASSWORD: user_password
ME_CONFIG_MONGODB_SERVER: mongodb
谢谢你的阅读!!