99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用Spring構(gòu)建REST服務(wù)(一)

「Spring」認證安全架構(gòu) ? 來源:「Spring」認證安全架構(gòu) ? 作者:「Spring」認證安全 ? 2022-07-28 15:59 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

REST 已迅速成為在 Web 上構(gòu)建 Web 服務(wù)的事實標準,因為它們易于構(gòu)建且易于使用。

關(guān)于 REST 如何適應(yīng)微服務(wù)世界還有一個更大的討論,但是——對于本教程——讓我們看看構(gòu)建 RESTful 服務(wù)。

為什么是 REST?REST 包含 Web 的規(guī)則,包括其架構(gòu)、優(yōu)勢和其他一切。這并不奇怪,因為它的作者 Roy Fielding 參與了十幾個管理網(wǎng)絡(luò)運行方式的規(guī)范。

有什么好處?Web 及其核心協(xié)議 HTTP 提供了一系列功能:

  • 合適的行動 ( GET, POST, PUT, DELETE, ...)
  • 緩存
  • 重定向和轉(zhuǎn)發(fā)
  • 安全性(加密和身份驗證)

這些都是構(gòu)建彈性服務(wù)的關(guān)鍵因素。但這還不是全部。網(wǎng)絡(luò)是由許多微小的規(guī)范構(gòu)成的,因此它能夠輕松發(fā)展,而不會陷入“標準戰(zhàn)爭”的泥潭。

開發(fā)人員能夠利用 3rd 方工具包來實現(xiàn)這些不同的規(guī)范,并立即讓客戶端和服務(wù)器技術(shù)觸手可及。

通過在 HTTP 之上構(gòu)建,REST API 提供了構(gòu)建方法:

  • 向后兼容的 API
  • 可演進的 API
  • 可擴展的服務(wù)
  • 安全的服務(wù)
  • 一系列無狀態(tài)服務(wù)到有狀態(tài)服務(wù)

重要的是要意識到,無論多么普遍,REST本身并不是一種標準,而是一種方法、一種風格、一組對您的架構(gòu)的約束,可以幫助您構(gòu)建 Web 規(guī)模的系統(tǒng)。在本教程中,我們將使用 Spring 產(chǎn)品組合來構(gòu)建 RESTful 服務(wù),同時利用 REST 的無堆棧特性。

入門

在完成本教程時,我們將使用Spring Boot。轉(zhuǎn)到Spring Initializr并將以下依賴項添加到項目中:

  • 網(wǎng)絡(luò)
  • JPA
  • H2

將名稱更改為“工資單”,然后選擇“生成項目”。A.zip會下載。解壓它。在里面你會發(fā)現(xiàn)一個簡單的、基于 Maven 的項目,包括一個pom.xml構(gòu)建文件(注意:你可以使用 Gradle。本教程中的示例將基于 Maven。)

Spring Boot 可以與任何 IDE 一起使用。您可以使用 Eclipse、IntelliJ IDEA、Netbeans 等。Spring Tool Suite是一個開源的、基于 Eclipse 的 IDE 發(fā)行版,它提供了 Eclipse 的 Java EE 發(fā)行版的超集。它包括使使用 Spring 應(yīng)用程序更加容易的功能。這絕不是必需的。但是,如果您想要為您的擊鍵帶來額外的魅力,請考慮一下。

到目前為止的故事……?

讓我們從我們能構(gòu)建的最簡單的東西開始。事實上,為了盡可能簡單,我們甚至可以省略 REST 的概念。(稍后,我們將添加 REST 以了解差異。)

大圖:我們將創(chuàng)建一個簡單的工資單服務(wù)來管理公司的員工。我們將員工對象存儲在(H2 內(nèi)存中)數(shù)據(jù)庫中,并訪問它們(通過稱為JPA的東西)。然后我們將使用允許通過 Internet 訪問的東西(稱為 Spring MVC層)包裝它。

以下代碼在我們的系統(tǒng)中定義了一個 Employee。

nonrest/src/main/java/payroll/Employee.java

package payroll;

import java.util.Objects;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

@Entity

class Employee {

private @Id @GeneratedValue Long id;

private String name;

private String role;

Employee() {}

Employee(String name, String role) {

this.name = name;

this.role = role;

}

public Long getId() {

return this.id;

}

public String getName() {

return this.name;

}

public String getRole() {

return this.role;

}

public void setId(Long id) {

this.id = id;

}

public void setName(String name) {

this.name = name;

}

public void setRole(String role) {

this.role = role;

}

@Override

public boolean equals(Object o) {

if (this == o)

return true;

if (!(o instanceof Employee))

return false;

Employee employee = (Employee) o;

return Objects.equals(this.id, employee.id) && Objects.equals(this.name, employee.name)

&& Objects.equals(this.role, employee.role);

}

@Override

public int hashCode() {

return Objects.hash(this.id, this.name, this.role);

}

@Override

public String toString() {

return "Employee{" + "id=" + this.id + ", name='" + this.name + '\'' + ", role='" + this.role + '\'' + '}';

}

}

盡管很小,但這個 Java 類包含很多:

  • @Entity是一個 JPA 注釋,用于使該對象準備好存儲在基于 JPA 的數(shù)據(jù)存儲中。
  • id, name, 和role是我們的 Employee域?qū)ο蟮膶傩浴?span style="color:rgb(0,0,153);">id用更多的 JPA 注釋標記以指示它是主鍵并由 JPA 提供程序自動填充。
  • 當我們需要創(chuàng)建一個新實例但還沒有 id 時,會創(chuàng)建一個自定義構(gòu)造函數(shù)。

有了這個域?qū)ο蠖x,我們現(xiàn)在可以轉(zhuǎn)向Spring Data JPA來處理繁瑣的數(shù)據(jù)庫交互。

Spring Data JPA 存儲庫是與支持針對后端數(shù)據(jù)存儲創(chuàng)建、讀取、更新和刪除記錄的方法的接口。在適當?shù)那闆r下,一些存儲庫還支持數(shù)據(jù)分頁和排序。Spring Data 根據(jù)接口中方法命名中的約定來綜合實現(xiàn)。

除了 JPA 之外,還有多個存儲庫實現(xiàn)。您可以使用 Spring Data MongoDB、Spring Data GemFire、Spring Data Cassandra 等。對于本教程,我們將堅持使用 JPA。

Spring 使訪問數(shù)據(jù)變得容易。通過簡單地聲明以下EmployeeRepository接口,我們將能夠自動

  • 創(chuàng)建新員工
  • 更新現(xiàn)有的
  • 刪除員工
  • 查找員工(一個、全部或按簡單或復(fù)雜屬性搜索)

nonrest/src/main/java/payroll/EmployeeRepository.java

package payroll;

import org.springframework.data.jpa.repository.JpaRepository;

interface EmployeeRepository extends JpaRepository {,>

}

為了獲得所有這些免費功能,我們所要做的就是聲明一個擴展 Spring Data JPA 的接口,JpaRepository將域類型指定為Employeeid 類型Long。

Spring Data 的存儲庫解決方案可以回避數(shù)據(jù)存儲細節(jié),而是使用特定于域的術(shù)語解決大多數(shù)問題。

信不信由你,這足以啟動應(yīng)用程序!Spring Boot 應(yīng)用程序至少是一個public static void main入口點和@SpringBootApplication注解。這告訴 Spring Boot 盡可能提供幫助。

nonrest/src/main/java/payroll/PayrollApplication.java

package payroll;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication

public class PayrollApplication {

public static void main(String... args) {

SpringApplication.run(PayrollApplication.class, args);

}

}

@SpringBootApplication是一個引入組件掃描、自動配置屬性支持的元注釋。在本教程中,我們不會深入探討 Spring Boot 的細節(jié),但本質(zhì)上,它將啟動一個 servlet 容器并提供我們的服務(wù)。

然而,沒有數(shù)據(jù)的應(yīng)用程序不是很有趣,所以讓我們預(yù)加載它。Spring 將自動加載以下類:

nonrest/src/main/java/payroll/LoadDatabase.java

package payroll;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.boot.CommandLineRunner;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

@Configuration

class LoadDatabase {

private static final Logger log = LoggerFactory.getLogger(LoadDatabase.class);

@Bean

CommandLineRunner initDatabase(EmployeeRepository repository) {

return args -> {

log.info("Preloading " + repository.save(new Employee("Bilbo Baggins", "burglar")));

log.info("Preloading " + repository.save(new Employee("Frodo Baggins", "thief")));

};

}

}

加載時會發(fā)生什么?

  • CommandLineRunner加載應(yīng)用程序上下文后,Spring Boot 將運行所有bean。
  • 此運行程序?qū)⒄埱?/span>EmployeeRepository您剛剛創(chuàng)建的副本。
  • 使用它,它將創(chuàng)建兩個實體并存儲它們。

右鍵單擊并運行 PayRollApplication,這就是你得到的:

顯示數(shù)據(jù)預(yù)加載的控制臺輸出片段

...2018-08-09 11:36:26.169 INFO 74611 --- [main] payroll.LoadDatabase:預(yù)加載員工(id=1,name=Bilbo Baggins,角色=竊賊)2018-08-09 11:36:26.174 INFO 74611 --- [main] payroll.LoadDatabase:預(yù)加載員工(id=2,name=Frodo Baggins,role=thief)...

這不是整個日志,而只是預(yù)加載數(shù)據(jù)的關(guān)鍵部分。(確實,檢查整個控制臺。這太棒了。)

.......未完待續(xù)......

以上就是今天關(guān)于Spring的一些討論,對你有幫助嗎?如果你有興趣深入了解,歡迎到Spring中國教育管理中心留言交流!

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    340

    瀏覽量

    15081
  • REST
    +關(guān)注

    關(guān)注

    0

    文章

    33

    瀏覽量

    9669
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    什么是java spring

    的事情。然而,Spring的用途不僅限于服務(wù)器端的開發(fā)。從簡單性、可測試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益。Spring
    發(fā)表于 09-11 11:16

    如何用ACM簡化你的Spring Cloud微服務(wù)環(huán)境配置管理

    摘要: 本文我們就如何使用阿里云ACM這樣的配置管理產(chǎn)品在Spring Cloud中替代Spring Cloud Config幫助簡化環(huán)境配置管理做個簡單的示例,幫助你理解基于ACM來簡化微
    發(fā)表于 02-02 14:18

    使用阿里云ACM簡化你的Spring Cloud微服務(wù)環(huán)境配置管理

    摘要: 本文我們就如何使用阿里云ACM這樣的配置管理產(chǎn)品在Spring Cloud中替代Spring Cloud Config幫助簡化環(huán)境配置管理做個簡單的示例,幫助你理解基于ACM來簡化微
    發(fā)表于 07-04 17:16

    Spring Boot嵌入式Web容器原理是什么

    同樣改變了個傳統(tǒng)的Web應(yīng)用服務(wù)的啟動流程和部署方式。通過自動配置機制,Spring Boot提供了
    發(fā)表于 12-16 07:57

    REST端口支持構(gòu)建動態(tài)REST請求來使用RESTful API網(wǎng)絡(luò)

    REST端口支持構(gòu)建動態(tài)REST請求來使用RESTful API網(wǎng)絡(luò)服務(wù)。 概覽 REST端口暴露了
    的頭像 發(fā)表于 01-17 09:11 ?5181次閱讀

    REST API是什么,如何使用REST端口

    API是Application Programming Interface(應(yīng)用程序接口)的縮寫,它是拿來描述個類庫的特征或是如何去運用它。按照目前比較主流的分法,可以分為REST API和非
    的頭像 發(fā)表于 02-17 18:00 ?1w次閱讀
    <b class='flag-5'>REST</b> API是什么,如何使用<b class='flag-5'>REST</b>端口

    Spring REST Docs RESTful服務(wù)文檔

    ./oschina_soft/spring-restdocs.zip
    發(fā)表于 05-24 09:31 ?1次下載
    <b class='flag-5'>Spring</b> <b class='flag-5'>REST</b> Docs RESTful<b class='flag-5'>服務(wù)</b>文檔

    Spring認證是什么?

    ,例如:配置、組件掃描、AOP、數(shù)據(jù)訪問和事務(wù)、REST、安全、自動配置、執(zhí)行器、 Spring boot測試等。
    的頭像 發(fā)表于 07-04 10:19 ?1569次閱讀
    <b class='flag-5'>Spring</b>認證是什么?

    如何獲得Spring認證?學(xué)習JAVA如何獲得Spring Professional認證?

    、組件掃描、AOP、數(shù)據(jù)訪問和事務(wù)、REST、安全、自動配置、執(zhí)行器、 Spring boot測試等。 1)參加Spring中國教育管理中心授權(quán)合作伙伴Spring培訓(xùn)課程 2)報名考
    的頭像 發(fā)表于 07-04 10:20 ?2237次閱讀
    如何獲得<b class='flag-5'>Spring</b>認證?學(xué)習JAVA如何獲得<b class='flag-5'>Spring</b> Professional認證?

    如何使用Spring構(gòu)建REST服務(wù)(二)

    要使用 Web 層次包裝您的存儲庫,您必須使用 Spring MVC。多虧了 Spring Boot,代碼基礎(chǔ)設(shè)施很少。相反,我們可以專注于行動。
    的頭像 發(fā)表于 07-28 16:00 ?939次閱讀

    如何使用Spring構(gòu)建REST服務(wù)(三)

    到目前為止,您擁有個基于 Web 服務(wù)來處理涉及員工數(shù)據(jù)的核心操作。但這還不足以讓事情變得“RESTful”。
    的頭像 發(fā)表于 07-28 16:01 ?1065次閱讀

    如何使用Spring構(gòu)建REST服務(wù)(四)

    通過個額外的庫和幾行額外的代碼,您已將超媒體添加到您的應(yīng)用程序中。但這并不是使您的服務(wù)成為 RESTful 所需的唯事情。REST
    的頭像 發(fā)表于 07-28 16:02 ?937次閱讀

    如何使用Spring構(gòu)建REST服務(wù)(五)

    到目前為止,您已經(jīng)使用基本鏈接構(gòu)建個可進化的 API。為了發(fā)展您的 API 并更好地為您的客戶服務(wù),您需要接受超媒體作為應(yīng)用程序狀態(tài)引擎的概念。
    的頭像 發(fā)表于 07-28 16:03 ?1024次閱讀

    REST的6大指導(dǎo)原則

    :符合REST架構(gòu)風格的 WEB API 或WEB 服務(wù)就是 REST API。 2. REST 的6大指導(dǎo)原則 REST 定義了6個原則,
    的頭像 發(fā)表于 10-09 14:27 ?2038次閱讀

    Spring Cloud :打造可擴展的微服務(wù)網(wǎng)關(guān)

    Spring Cloud Gateway是個基于Spring Framework 5和Project Reactor的反應(yīng)式編程模型的微服務(wù)網(wǎng)關(guān)。它提供了豐富的功能,包括動態(tài)路由、請
    的頭像 發(fā)表于 10-22 10:03 ?725次閱讀
    <b class='flag-5'>Spring</b> Cloud :打造可擴展的微<b class='flag-5'>服務(wù)</b>網(wǎng)關(guān)