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