URI和URL、REST


URI和URL

URI(Uniform Resource Identifier ) 是一個緊湊的字符串用來標示抽象或物理資源。可以分為URL,URN或同時具備locators 和names特性的一個東西。

 

URN作用就好像一個人的名字,

URL就像一個人的地址(定位該資源的主要訪問機制(如其網絡“位置”))。

換句話說:URN確定了東西的身份,URL提供了找到它的方式。

 

URI:Uniform Resource Identifier,統一資源標識符

URL:Uniform Resource Location統一資源定位符

REST

什么是REST?

 

REST即Representational State Transfer 即表現層狀態轉換。HTTP1.0面向的是Web的靜態文本,隨着Ajax等出現,需要制定新的協議規范動態富文本的傳輸和使用。

 

 

REST的五個關鍵詞:

資源(resource):是互聯網中信息數據的一種抽象性描述,REST架構即面向資源的架構,資源是整個網絡處理的核心。

資源表述(representation): 即資源的表現形式,常用的有HTTP文本,Json,XML等。

狀態轉移(state transfer):資源的轉化或則傳輸(“狀態”指的是資源在某一時刻的表現形式,“轉移”是指按照一定的邏輯轉化資源表現形式或者傳輸資源)。

統一接口(Uniform inference):因為是分布式架構,為了方便不同服務器用戶使用和規范,REST要求使用統一的接口規范。

超文本驅動:REST架構的提出很大程度上是用來指導HTTP1.1協議的制定,支持超鏈接和URI形式的驅動方式,URI可以理解成資源的唯一標志,是資源的地址。

REST的五個架構約束

客戶-服務器:REST是一種響應式架構,一般只允許客戶端主動向服務器端發起響應請求,服務器端做出對應的響應操作。

無狀態:狀態是指服務請求的狀態,是用戶交互時的會話信息。有狀態的Web服務會將用戶的相關信息保存在與該用戶交互的服務的session中,Client的用戶請求只能被該server接受和理解,不利於負載均衡。無狀態的Web服務中,Clinet的用戶請求必須攜帶服務要參考的全部信息,每一個請求都是獨立的,可以被任何可用的服務接受,便於進行擴展。

緩存:指的是客戶端可以緩存一些需要的數據,以便於同樣的請求操作復用。

統一接口: 參考上述“五個關鍵詞”。

分層系統:REST將結構分層的思想使得各層服務器相對獨立,各層服務器只需面向直接相鄰的服務器或用戶,提高了系統的可伸縮性。

REST的六個特征

面向資源、可尋址、連通性、無狀態、統一接口、超文本驅動。

可尋址:URI是資源的唯一標識(地址),系統可根據URI定位或重定位到資源。

連通性:資源在設計時要考慮資源之間的聯系,避免存在孤立的資源。

 

RestFul

RestFul 一種url連接新寫法,遵守http協議,和之前連接寫法沒有本質上的不同,url參數拼接方式改變,

參數拼接 login?username=zhangsan 改為了 login/zhangsan 更加安全

 

RestFul的響應信息是json,細分了多種請求方式的使用

 

get 查詢post 添加 表單提交delete 刪除patch 修改put 添加

 

 

Rest相關注解

  1. @RestController= @Controller+@ResponseBody

    相當於@Controller+@ResponseBody兩個注解的結合,返回json數據不需要在方法前面加@ResponseBody注解了,

    但使用@RestController這個注解,就不能返回jsp,html頁面,視圖解析器無法解析jsp,html頁面

  1. 查詢 get方式請求

​   可以在Controller中設置必須使用get請求

​    @RequestMapping(path = "getAllGuru",method = RequestMethod.GET)

​    method = RequestMethod.GET 規定請求類型為Get

  1. @GetMapping 等價於 @RequestMapping(path = "getAllGuru",method = RequestMethod.GET) 要求請求方式必須是get

    @PostMapping

    @DeleteMapping

    @PatchMapping

  1. @PathVariable("name") 獲得地址中的參數 用於Rest風格 配合占位符的url地址寫法使用 "testGet/{name}"

​   @RequestParam request.getAttribute()

  ​ @GetMapping("testGet/{name}")

  public String testGet(@PathVariable("name") String name){}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM