
如何快速實現(xiàn)REST API集成以優(yōu)化業(yè)務(wù)流程
點擊屏幕底部的“Generate”(生成)按鈕。這將下載一個包含項目模板的 zip 文件。將 zip 文件解壓到您選擇的文件夾中。
打開 Eclipse IDE,轉(zhuǎn)到“File”(文件)菜單并選擇“Import”(導(dǎo)入)。在“Maven”下,選擇“Existing Maven Projects”(現(xiàn)有 Maven 項目)。點擊“Next”(下一步)。
瀏覽解壓后的 zip 文件目錄,選擇包含 pom.xml 文件的根文件夾。點擊“Finish”(完成)將項目導(dǎo)入到 Eclipse IDE 中。
在文件資源管理器中,您將會看到以下文件夾:
src/main/java/com/example/employee
子目錄包含了本教程中所有的 Java 類。application.properties
文件包含了 Spring Boot 用來配置應(yīng)用程序的屬性。在本教程的后續(xù)部分,您將會向此文件中添加數(shù)據(jù)庫配置的詳細信息,例如數(shù)據(jù)庫 URL、用戶名和密碼。pom.xml
文件列出了您在 Spring Initializr 中創(chuàng)建 Spring Boot 項目時所添加的所有依賴項。請注意,有一個名為?EmployeeApplication.java
?的文件,這是啟動 Spring Boot 應(yīng)用程序的入口點。
這個文件包含了以下 Spring Boot 注解的功能:
@EnableAutoConfiguration
:這將啟用 Spring Boot 的自動配置功能,該功能會根據(jù)項目中的類路徑設(shè)置、各種屬性設(shè)置和其他因素來自動配置您的 Spring 應(yīng)用程序。@Configuration
:它表明該類使用了 Spring 基于 Java 的配置。在配置類中,您可以定義應(yīng)用程序正在使用的所有 bean。Spring Boot 將在運行時使用這些 bean 定義來實例化它們。@ComponentScan
:它告訴 Spring 在哪些包中查找其他組件、配置和服務(wù),允許 Spring Boot 自動發(fā)現(xiàn)和注冊這些組件作為 bean。在本例中,它將掃描與 EmployeeApplication
類相同的包及其子包中的組件。我們首先需要了解Spring Boot應(yīng)用程序的主要結(jié)構(gòu)層。以下是為項目中的每個結(jié)構(gòu)層創(chuàng)建子包的步驟:
要為上述組件創(chuàng)建單獨的包,請在Eclipse中右鍵點擊com.example.employee
包,然后選擇New
,接著選擇Package
。在彈出的新窗口中,在Name
字段輸入com.example.employee.repository
,然后點擊Finish
。
這將為存儲庫組件創(chuàng)建一個文件夾。請對以下軟件包重復(fù)上述步驟:
在為每個子包中的應(yīng)用程序編寫代碼之前,讓我們在Spring Boot中創(chuàng)建表并配置MySQL連接詳細信息,這些信息將在本教程中使用。
打開 MySQL Workbench。在主頁中,單擊 MySQL 連接旁邊的 [+] 圖標。
此時將打開 Setup New Connection 彈出窗口。輸入 “spring-boot-test” 作為連接名稱。在 Default Schema (默認架構(gòu)) 中,輸入 “employee-schema”。
點擊 OK。將在主頁上創(chuàng)建新的 MySQL 連接。
要打開連接,請點擊主頁上的“spring-boot-test”。在“employee-schema”下,右鍵點擊“Tables”并選擇“Create Table”。
添加四列:emp_id、first_name、last_name、email_id。對于emp_id,請勾選“Primary Key”、“Not Null”和“Auto Increment”選項。您的表格應(yīng)該類似于下圖所示:
點擊“Apply”然后點擊“Finish”。
要在應(yīng)用程序中連接到這個MySQL實例,必須向Spring Boot提供數(shù)據(jù)庫的詳細信息。打開application.properties
文件,并添加以下內(nèi)容:
spring.datasource.url = jdbc:mysql://127.0.0.1:3306/employee-schema
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
MySQL5InnoDBDialect
是一個方言,用于通知Spring Boot正在使用的數(shù)據(jù)庫類型。基于這個信息,Spring Boot將為該特定數(shù)據(jù)庫生成相應(yīng)的SQL查詢。有了這些配置信息,Spring Boot將自動為你配置數(shù)據(jù)庫連接。
現(xiàn)在,表已經(jīng)準備就緒,我們可以開始為應(yīng)用程序的各個層添加代碼。
返回到Eclipse IDE,右鍵點擊com.example.employee.model
包,選擇創(chuàng)建新類的選項。
將會出現(xiàn)一個包含類詳細信息的新彈出窗口。在“Name”(名稱)字段中,輸入“Employee”。點擊“Finish”。復(fù)制再試一次分享
將內(nèi)容添加到文件中:
package com.example.employee.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "employee")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="emp_id")
private Long id;
@Column(name="first_name")
private String firstName;
@Column(name="last_name")
private String lastName;
@Column(name="email_id")
private String emailId;
}
讓我們分解文件中的代碼:
@Entity
注解指定這個 Java 類映射到數(shù)據(jù)庫中的一個表。@Table
注解在屬性 name
的幫助下指定這個類映射到哪個具體的表。@Column
注解允許定義一組屬性,比如名稱、長度等。name
屬性將是該實例變量映射到的數(shù)據(jù)庫表中的字段名稱。@Id
告訴 Spring Boot 這個特定的字段是表中的主鍵。@GeneratedValue
指定將用于生成主鍵的策略。有四種主要的主鍵生成策略,如下所述:
GenerationType.AUTO
– 這是 Spring Boot 使用的默認策略。如果您使用此策略,JPA 提供者將根據(jù) application.properties
文件中給出的方言決定適當?shù)牟呗詠砩芍麈I。GenerationType.IDENTITY
– 該策略使用數(shù)據(jù)庫標識列來確定主鍵策略。例如,在創(chuàng)建 employee 表時,您將 emp_id 列定義為數(shù)據(jù)庫中的自動遞增列?,F(xiàn)在,當您使用此策略時,將從1開始生成唯一主鍵,并在每次向表中插入新行時遞增。GenerationType.SEQUENCE
– 此策略使用數(shù)據(jù)庫序列生成主鍵。GenerationType.TABLE
– 此策略使用數(shù)據(jù)庫表生成主鍵。此外,你將為上述實例變量創(chuàng)建 setter 和 getter 方法。在 Eclipse 中自動生成這些方法,請右鍵單擊 Employee.java
文件并選擇 Source
(源)。選擇 Generate Getters and Setters
(生成 Getter 和 Setter)。點擊 Select All
,然后點擊 Generate
按鈕。
在下一節(jié)中,您將創(chuàng)建存儲庫類,該類將使用此模型類從數(shù)據(jù)庫中訪問員工詳細信息。
在 com.example.employee.repository 包下創(chuàng)建一個名為 EmployeeRepository 的類,并將代碼替換為以下內(nèi)容:
package com.example.employee.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.example.employee.model.Employee;
@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
}
@Repository
?注解表明該類是一個數(shù)據(jù)倉庫,負責(zé)包含 CRUD(創(chuàng)建、讀取、更新、刪除)操作。CRUD 是數(shù)據(jù)庫操作的四個基本功能。
EmployeeRepository
擴展了 JpaRepository
接口。在將 JpaRepository
應(yīng)用于您的存儲庫時,您需要傳遞兩個參數(shù):第一個是您希望該存儲庫管理的模型類的類型,第二個是主鍵的數(shù)據(jù)類型。
Spring Data JPA 提供的 JpaRepository
接口使倉庫類能夠檢索、更新和刪除 employee
表中的記錄。
該接口定義了一系列方法,如?save()
、findAll()
?和?delete()
,用于對數(shù)據(jù)庫執(zhí)行操作。這些方法的實現(xiàn)由名為?SimpleJpaRepository
?的默認實現(xiàn)類提供。通過調(diào)用這些方法,您可以避免為這些基本操作編寫自定義查詢。
在下一節(jié)中,您將創(chuàng)建一個服務(wù)類,該類將調(diào)用 JpaRepository
實現(xiàn)中的方法。
服務(wù)組件包含了業(yè)務(wù)邏輯。在 com.example.employee.service
包下,創(chuàng)建一個名為 EmployeeService
的類,并將以下代碼填入其中:
package com.example.employee.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.employee.model.Employee;
import com.example.employee.repository.EmployeeRepository;
import java.util.List;
@Service
public class EmployeeService {
@Autowired
EmployeeRepository empRepository;
}
在Spring框架中,@Autowired
?注解被用來實例化類對象,實現(xiàn)依賴注入。
當一個類被@Repository
、@Component
等注解標記時,Spring就有能力為這個類創(chuàng)建一個Bean。隨后,在其他需要使用這個Bean的類中,可以通過@Autowired
注解來自動注入這個Bean。這個過程被稱為Spring中的依賴注入。此外,@ComponentScan
注解允許Spring在指定的包中查找并注冊這些被注解標記的類作為Bean。
現(xiàn)在,我們將在服務(wù)層中創(chuàng)建一些方法。這些方法會調(diào)用EmployeeRepository
中的方法,而EmployeeRepository
是JpaRepository
的一個擴展。
接下來,您需要在EmployeeService
類中的EmployeeRepository empRepository
成員變量之后,添加以下這些方法:
// CREATE
public Employee createEmployee(Employee emp) {
return empRepository.save(emp);
}
// READ
public List<Employee> getEmployees() {
return empRepository.findAll();
}
// DELETE
public void deleteEmployee(Long empId) {
empRepository.deleteById(empId);
}
createEmployee
方法調(diào)用 empRepository.save()
函數(shù),該函數(shù)在保存到數(shù)據(jù)庫后會返回 Employee
對象。傳遞給 createEmployee
方法的參數(shù)是一個包含所有要保存細節(jié)的 Employee
模型。
類似地,getEmployees()
和 deleteEmployee()
分別調(diào)用了由 Repository
擴展的 JpaRepository
方法。
getEmployees()
函數(shù)的作用是返回數(shù)據(jù)庫中所有員工的詳細信息。deleteEmployee()
函數(shù)將刪除表中 emp_id
等于傳遞的 employee
記錄的行,使用的是 deleteById(empId)
方法。要更新員工詳細信息,請在deleteEmployee(Long empId)
方法后添加以下函數(shù):
// UPDATE
public Employee updateEmployee(Long empId, Employee employeeDetails) {
Employee emp = empRepository.findById(empId).get();
emp.setFirstName(employeeDetails.getFirstName());
emp.setLastName(employeeDetails.getLastName());
emp.setEmailId(employeeDetails.getEmailId());
return empRepository.save(emp);
}
讓我們來分解上述的 updateEmployee
方法:
updateEmployee
方法接受兩個參數(shù)——雇員ID(主鍵)和包含新雇員詳細信息的雇員對象。empId
的員工對象,并將其存儲在變量 emp
中。employee
對象之后,您將使用在 Employee.java
中定義的 setter 方法來使用存儲在 employeeDetails
中的新值更新字段。empRespository.save(emp)
函數(shù)將更新后的 emp
對象保存到數(shù)據(jù)庫。在com.example.employee.controller包下創(chuàng)建一個名為EaseController的類,并將代碼替換為以下內(nèi)容:
package com.example.employee.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.example.employee.model.Employee;
import com.example.employee.service.EmployeeService;
@RestController
@RequestMapping("/api")
public class EmployeeController {
@Autowired
EmployeeService empService;
}
@RequestMapping
注解定義了在此控制器中創(chuàng)建的所有 REST API 的基礎(chǔ) URL。這個基礎(chǔ) URL 后面會跟上為每個控制器方法提供的具體 REST 端點。
@RestController
注解在類級別上是以下兩個注解的組合:
@Controller
:告訴 Spring Boot 這個類是一個控制器,負責(zé)處理 HTTP 請求。@ResponseBody
:表示該控制器內(nèi)的方法的返回值將直接作為 REST API 的響應(yīng)體返回,而不是解析為視圖名或執(zhí)行其他跳轉(zhuǎn)。EmployeeService
是通過 @Autowired
注解實現(xiàn)依賴注入的,這樣它就可以在控制器中被使用了。
在進一步實現(xiàn)控制器中的 REST API 請求之前,我們先來概述一下這些 REST API 的基本結(jié)構(gòu):
為了創(chuàng)建一個新的雇員記錄,我們需要定義一個 POST 方法,其訪問的端點為?api/employees
。這個 POST 請求的請求體將包含從客戶端發(fā)送到 API 的數(shù)據(jù),這些數(shù)據(jù)代表要保存到數(shù)據(jù)庫中的新員工信息。這些數(shù)據(jù)通常以 JSON 格式發(fā)送,其結(jié)構(gòu)可能類似于以下示例:
{
"firstName": "Joe",
"lastName": "B",
"emailId": "example@gmail.com"
}
要獲取員工的詳細信息,我們需要使用端點 api/employees
并定義一個 GET 方法。
要更新員工的詳細信息,我們可以使用端點 api/employees/{empId}
并創(chuàng)建一個 PUT HTTP 方法。其中,{empId}
是一個路徑參數(shù),代表要更新的員工的 ID。在發(fā)送到 API 的請求體中,我們需要包含更新后的員工詳細信息,其格式通常如下所示:
{
"firstName": "Joe",
"lastName": "B",
"emailId": "newemail@gmail.com"
}
要刪除一個員工,需要創(chuàng)建一個HTTP方法,使用端點 /emp/{empId}
,其中 {empId}
是要刪除其數(shù)據(jù)的員工ID。
讓我們?yōu)檫@四個REST API創(chuàng)建方法。將以下方法添加到 siteService
和 empService
之后的 siteController
類中:
@RequestMapping(value="/employees", method=RequestMethod.POST)
public Employee createEmployee(@RequestBody Employee emp) {
return empService.createEmployee(emp);
}
讓我們分解一下新添加的代碼:
value
– 這是端點。在你的情況下,是 /employees
。請注意,value
字段中給出的端點僅為 /employees
,而不是 /API/employees
。由于 /API
對于所有端點都是通用的,因此將其作為基URL添加到類的 @RequestMapping
注解中。method
– 這是由枚舉表示的HTTP方法類型。對于創(chuàng)建員工端點,HTTP方法是 POST。因此,您將添加 RequestMethod.POST
作為其值。@RequestBody
注解用于將端點的請求體映射到方法參數(shù)。emp
將包含傳遞給此端點的請求JSON。類似地,您將為所有其他REST API添加代碼。將這些方法添加到 CableController
類的 createEmployee
方法之后:
@RequestMapping(value="/employees", method=RequestMethod.GET)
public List<Employee> readEmployees() {
return empService.getEmployees();
}
@RequestMapping(value="/employees/{empId}", method=RequestMethod.PUT)
public Employee readEmployees(@PathVariable(value = "empId") Long id, @RequestBody Employee empDetails) {
return empService.updateEmployee(id, empDetails);
}
@RequestMapping(value="/employees/{empId}", method=RequestMethod.DELETE)
public void deleteEmployees(@PathVariable(value = "empId") Long id) {
empService.deleteEmployee(id);
}
請注意,有些方法使用了@PathVariable
注解,這表示REST API端點包含了一個路徑參數(shù)。@PathVariable
注解會將端點URL中指定的路徑變量值映射到Java方法的對應(yīng)參數(shù)上。
在正式開始構(gòu)建之前,您可以參考以下GitHub存儲庫作為參考。
在Eclipse的Project Explorer中,右鍵點擊employee
項目文件夾,選擇“Run As”,然后再選擇“Maven build…”來運行構(gòu)建過程。
此時將打開 Edit Configuration 彈出窗口。在 Goals 中鍵入 spring-boot:run。
轉(zhuǎn)到 Environment 選項卡,然后單擊 Add。將打開 New Environment Variable (新建環(huán)境變量) 彈出窗口。
在 Name 字段中,輸入 “spring.datasource.username”。對于 Value (值),輸入您的 MySQL 用戶名。單擊 OK。
同樣,添加一個新的環(huán)境變量,在 Name 中為 “spring.datasource.password”,在 Value 中加入你的 MySQL 密碼。單擊 Apply (應(yīng)用),然后單擊 Run(運行)。
應(yīng)用程序現(xiàn)在將開始構(gòu)建。成功的構(gòu)建將在控制臺上顯示以下內(nèi)容:
如果您查看控制臺上的最后幾行輸出,它會顯示應(yīng)用程序已經(jīng)在默認的8080端口上開始運行。如果這個端口被占用,Spring Boot會自動尋找并使用其他可用的端口。
當您在瀏覽器中訪問https://localhost:8080
時,可能會看到一個默認的“Whitelabel Error Page”,這是因為還沒有配置任何特定的首頁或路由。
接下來,您將學(xué)習(xí)如何測試四個CRUD(創(chuàng)建、讀取、更新、刪除)API。
Postman是一個流行的應(yīng)用程序,它可以幫助您開發(fā)、測試和記錄API。如果您還沒有創(chuàng)建Postman的免費賬戶,建議您注冊一個。
在Postman中,您可以創(chuàng)建一個工作區(qū),這個工作區(qū)可以用于與團隊成員一起協(xié)作處理項目。每個工作區(qū)可以包含一個或多個集合,集合就像是一個包含了多個API定義的文件夾。
以下是在Postman中創(chuàng)建工作區(qū)的步驟:
要創(chuàng)建收藏集,請單擊左側(cè)面板中的 Create new Collection 圖標。
單擊產(chǎn)品系列名稱旁邊的 Edit(編輯)圖標,然后輸入您的 “Employee collection(員工產(chǎn)品系列)”。
接下來,您將在集合中為在 Spring Boot 應(yīng)用程序中創(chuàng)建的四個 REST API 中的每一個創(chuàng)建和測試請求。
在左側(cè)面板中,單擊 View more actions (查看您創(chuàng)建的集合的更多操作),然后選擇 Add request(添加請求)。
將請求名稱指定為 “Create Employee”。將創(chuàng)建一個新請求,如下所示:
將 HTTP 方法更改為 POST。
在 Enter Request URL (輸入請求 URL) 字段中,輸入 “https://localhost:8080/api/employees”。
端點 /API/employees
前面是應(yīng)用程序運行的服務(wù)器和端口。如果您的應(yīng)用程序在不同的端口上運行,請?zhí)鎿QURL中的8080。
要將請求正文發(fā)送到這個請求URL終端節(jié)點,請轉(zhuǎn)到“Body”(正文)選項卡,并勾選“JSON”作為請求正文格式的原始復(fù)選框。
在提供的文本框中輸入以下數(shù)據(jù):
{
"firstName":"Nida",
"lastName":"Khan",
"emailId":"example1@gmail.com"
}
以下是將要添加到數(shù)據(jù)庫中的員工詳細信息。請點擊保存,然后發(fā)送請求。以下是在Postman中您可能會收到的回復(fù):
{
"id": 1,
"firstName": "Nida",
"lastName": "Khan",
"emailId": "example1@gmail.com"
}
請注意200 OK響應(yīng)狀態(tài),并且響應(yīng)主體是一個JSON,其中包含了保存在數(shù)據(jù)庫中的員工記錄的詳細信息。
轉(zhuǎn)到MySQL,并通過執(zhí)行查詢來驗證是否使用上述員工詳細信息創(chuàng)建了一個新行,其中包含emp_id=1
:
SELECT * FROM employee;
同樣地,您也需要創(chuàng)建并運行針對員工的 GET、DELETE 和 UPDATE 請求。
對于獲取員工信息的 GET 請求,請在請求 URL 字段中輸入 http://localhost:8080/api/employees
。無需填寫請求體,直接點擊發(fā)送即可。
要更新具有特定ID的員工信息,請創(chuàng)建一個PUT請求。在輸入請求URL字段中輸入 http://localhost:8080/api/webs/1
。在原始JSON正文中輸入以下詳細信息,然后點擊發(fā)送:
{
"firstName": "Nida",
"lastName": "K",
"emailId": "example2@gmail.com"
}
為員工記錄創(chuàng)建一個請求。在“Enter Request URL”(輸入請求 URL)字段中,輸入DELETE http://localhost:8080/api/employees/1
。請求體保持為空,然后點擊“Send”(發(fā)送)。
通過本教程,您已經(jīng)學(xué)習(xí)了如何利用 Spring Boot 來構(gòu)建 REST API,并且掌握了在 Postman 中對這些 API 進行測試的方法。
接下來,通過查看這些文章并在 Spring Boot 應(yīng)用程序中實現(xiàn) Twilio API 來挑戰(zhàn)自己:
原文鏈接:https://www.twilio.com/en-us/blog/create-rest-apis-java-spring-boot