欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:后端 Restful風(fēng)格及實踐

柚子快報邀請碼778899分享:后端 Restful風(fēng)格及實踐

http://yzkb.51969.com/

目錄

1、RESTFUL 原則

1.1、資源與URI

URL,URI

資源

1.2、統(tǒng)一資源接口

1.3、資源的表述

1.4、狀態(tài)

有狀態(tài)和無狀態(tài)

狀態(tài)轉(zhuǎn)移(應(yīng)用狀態(tài)化改變資源狀態(tài)化)

2、restful風(fēng)格接口書寫方式

3、restful風(fēng)格的實踐

3.1、項目結(jié)構(gòu)

3.2、創(chuàng)建項目

3.3、配置

3.3.1、添加mybatis plugs依賴

3.3.2、 添加熱部署

?3.3.3、配置application.yml?

3.4、編碼

持久層

數(shù)據(jù)操作層

服務(wù)接口層

服務(wù)層

控制層?

使用postman進行測試

前言:

? ? ? ?restful是一種風(fēng)格,并不是一種 標準,使用它可以更好的創(chuàng)建分布式架構(gòu);restful風(fēng)格中使用名詞定位資源,并使用HTTP協(xié)議里的動詞(GET、POST、PUT、DELETE)來實現(xiàn)資源的增刪改查操作。?

1、RESTFUL 原則

1.1、資源與URI

URL,URI

URI:全稱為Uniform Resource Identifier,即統(tǒng)一資源標志符

URI是一個用來標識抽象或物理資源的緊湊字符串,通過這個標識可以訪問一個唯一的資源。

URL:全稱為Universal Resource Locator,即統(tǒng)一資源定位符

URL是一種具體的URI,它是URI的一個子集,它不僅唯一標識資源,而且還提供了定位該資源的信息。

資源

互聯(lián)網(wǎng)中資源多種多樣,我門所知的視頻,圖片,文字,音頻,html等都是資源的表述,資源通過URI進行唯一標識,每一個URI代表一種資源,所以我們能通過檢索查詢到特定資源。

1.2、統(tǒng)一資源接口

? ? ? ? RESTful架構(gòu)應(yīng)該遵循統(tǒng)一接口原則,統(tǒng)一接口包含了一組受限的預(yù)定義的操作,不論什么樣的資源,都是通過使用相同的接口進行資源的訪問。接口應(yīng)該使用標準的HTTP方法如GET,PUT和POST,并遵循這些方法的語義。

? ? ? ? 如果按照HTTP方法的語義來暴露資源,那么接口將會擁有安全性和冪等性的特性,例如GET和HEAD請求都是安全的, 無論請求多少次,都不會改變服務(wù)器狀態(tài)。而GET、HEAD、PUT和DELETE請求都是冪等的,無論對資源操作多少次, 結(jié)果總是一樣的,后面的請求并不會產(chǎn)生比第一次更多的影響。

get-安全且冪等post-不安全不冪等put-不安全且冪等delete-不安全且冪等

1.3、資源的表述

? ? ? ? ?客戶端獲取的只是資源的表述而已。 資源在外界的具體呈現(xiàn),可以有多種表述(或成為表現(xiàn)、表示)形式,在客戶端和服務(wù)端之間傳送的也是資源的表述,而不是資源本身。 例如文本資源可以采用html、xml、json等格式,圖片可以使用PNG或JPG展現(xiàn)出來。

1.4、狀態(tài)

狀態(tài)可分為應(yīng)用狀態(tài)和資源狀態(tài),應(yīng)用狀態(tài)由客戶端維護,資源狀態(tài)由服務(wù)器端維護。

有狀態(tài)和無狀態(tài)

有狀態(tài)

是指狀態(tài)信息是由服務(wù)器端負責(zé),例如用戶通過提交的cookie信息查找對應(yīng)服務(wù)器端的session信息,由服務(wù)器確定用戶狀態(tài)(如cookie和session來維持登錄)。

無狀態(tài)

當請求端提出請求時,狀態(tài)信息有客戶客戶端負責(zé),請求本身包含了響應(yīng)端為相應(yīng)這一請求所需的全部信息關(guān)聯(lián)的用戶交互操作保留的某種公共信息,例如JWT風(fēng)格,使用token來維持狀態(tài)信息。

狀態(tài)轉(zhuǎn)移(應(yīng)用狀態(tài)化改變資源狀態(tài)化)

例如打開一個淘寶主頁面并點擊某個商品,按照常理它會跳轉(zhuǎn)到商品詳情頁面,可實際上它跳轉(zhuǎn)到了登錄頁面。

這是因為服務(wù)器不能識別客戶端狀態(tài),當?shù)卿浐?,服?wù)器端的session就可以判斷出是哪個用戶,并響應(yīng)資源。

狀態(tài)轉(zhuǎn)移可以理解為:根據(jù)用戶端的狀態(tài)改變資源狀態(tài)

2、restful風(fēng)格接口書寫方式

使用名詞表示資源使用單復(fù)數(shù)表示單個和多個資源使用正斜杠(/)表示層次關(guān)系使用連字符( - )來提高URI的可讀性在URI中使用小寫字母在URI中使用小寫字母

書寫格式:標準的HTTP方法+URI

GET - /users返回用戶列表GET- /users/id返回特定用戶DELETE- /users/id刪除指定用戶POST- /users添加用戶PUT -/users/id更新指定用戶

3、restful風(fēng)格的實踐

本實踐基于springboot+mybatisplugs+maven

3.1、項目結(jié)構(gòu)

3.2、創(chuàng)建項目

使用官方推薦方式:Spring Initializr

我的Group為:com.duhong.learning

?回車下載壓縮包,再導(dǎo)入到idea中

3.3、配置

3.3.1、添加mybatis plugs依賴

在maven 庫(https://mvnrepository.com/)中查詢mybatis plugs依賴

pom.xml中添加依賴

com.baomidou

mybatis-plus-boot-starter

3.0.1

3.3.2、 添加熱部署

1、pom.xml配置

org.springframework.boot

spring-boot-devtools

org.springframework.boot

spring-boot-maven-plugin

true

2、配置設(shè)置

?3.3.3、配置application.yml?

說明:要先刪除application.properties減少干擾,yml文件的優(yōu)先級大于properties文件,但都生效,后面properties文件會覆蓋yml文件。

#配置服務(wù)端口

server:

port: 80

#配置數(shù)據(jù)源

spring:

datasource:

driver-class-name: com.mysql.cj.jdbc.Driver

url: jdbc:mysql://localhost:3306/db3

username: root

password: 3237never

#配置mybatis plugs插件,設(shè)置數(shù)據(jù)庫id自增,默認為ASSIGN_ID,使用id自增,簡便配置

mybatis-plus:

global-config:

db-config:

id-type: auto

3.4、編碼

持久層

package com.duhong.learning.domain;

import com.baomidou.mybatisplus.annotation.TableName;

import lombok.AllArgsConstructor;

import lombok.Data;

import lombok.Getter;

import lombok.Setter;

import org.springframework.stereotype.Component;

//lombok,一個java類庫,提供了一組注解,簡化了pojo實體類開發(fā)

//@AllArgsConstructor

@Data//相當于getter,setter,tostring

@TableName(value = "account")

public class User {

private Integer id;

private String name;

private Double balance;

}

數(shù)據(jù)操作層

package com.duhong.learning.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import com.duhong.learning.domain.User;

import org.apache.ibatis.annotations.Mapper;

import org.apache.ibatis.annotations.Select;

//@Mapper

//public interface UserDao {

// @Select("select * from account where id=#{id}")

// User getById(Integer id);

//}

@Mapper

public interface UserDao extends BaseMapper {

}

服務(wù)接口層

package com.duhong.learning.service;

import com.duhong.learning.domain.User;

import java.util.List;

public interface UserService {

public User selectById(Integer id);

public List selectList();

public Integer deleteById(Integer id);

public Integer insert(User user);

public Integer updateById(User user,Integer id);

}

服務(wù)層

package com.duhong.learning.service.impl;

import com.duhong.learning.dao.UserDao;

import com.duhong.learning.domain.User;

import com.duhong.learning.service.UserService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import java.util.List;

@Service

public class UserServiceImpl implements UserService {

private User user;

@Autowired

UserDao userDao;

@Override

public User selectById(Integer id) {

try{

user=null;

user=userDao.selectById(id);

}catch (Exception e){

System.out.println(e.getMessage());

}

return user;

}

@Override

public List selectList() {

List users=userDao.selectList(null);

// for(User item :users){

// System.out.println(item.toString());

// }

return users;

}

//刪除,添加,更新指定用戶,返回執(zhí)行條數(shù),可以用返回值查看是否操作成功

@Override

public Integer deleteById(Integer id) {

Integer sign=0;

try {

sign=userDao.deleteById(id);

}catch (Exception e){

System.out.println(e.getMessage());

}

return sign;

}

@Override

public Integer insert(User user) {

Integer sign=0;

try {

user.setName(user.getName());

user.setBalance(user.getBalance());

sign=userDao.insert(user);

}catch (Exception e){

System.out.println(e.getMessage());

}

return sign;

}

@Override

public Integer updateById(User user, Integer id) {

Integer sign=0;

try {

user.setId(id);

user.setName(user.getName());

user.setBalance(user.getBalance());

sign=userDao.updateById(user);

}catch (Exception e){

System.out.println(e.getMessage());

}

return sign;

}

}

控制層?

package com.duhong.learning.controller;

import com.duhong.learning.domain.User;

import com.duhong.learning.service.impl.UserServiceImpl;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.*;

import java.util.List;

//Restful風(fēng)格

@RestController

public class UserController {

@Autowired

UserServiceImpl userService;

@RequestMapping(value = "/users",method = RequestMethod.GET)

List showAll(){

return userService.selectList();

}

@RequestMapping(value = "/users/{id}",method = RequestMethod.GET)

User showById(@PathVariable Integer id){

return userService.selectById(id);

}

@RequestMapping(value = "/users/{id}",method = RequestMethod.DELETE)

Integer deleteById(@PathVariable Integer id){

return userService.deleteById(id);

}

@PutMapping("/users/{id}")//換種方式,等效于@RequestMapping(value = "/users/{id}",method = RequestMethod.PUT)

Integer updataById(@RequestBody User user,@PathVariable Integer id){

return userService.updateById(user,id);

}

@PostMapping("/users")//接受User對象參數(shù)

Integer add(@RequestBody User user){

return userService.insert(user);

}

}

使用postman進行測試

推薦vscode中使用Postcode插件,相當方便

查詢所有

?添加數(shù)據(jù)

根據(jù)id查詢指定用戶

?

更新指定用戶

?

?刪除指定用戶

?感謝你閱讀到最后~?

?期待你的關(guān)注、收藏、評論、點贊~

??愿我們一起變強?

柚子快報邀請碼778899分享:后端 Restful風(fēng)格及實踐

http://yzkb.51969.com/

精彩內(nèi)容

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19409622.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄