如何使用SpringBoot和MongoDB创建RESTful API

297 阅读2分钟

在这篇文章中,我们将使用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

谢谢你的阅读!!