跳至主要内容

[vscode] Rest Client

VSCode Rest Client @ Github

基本使用

  • 建立副檔名為 .http.rest 的檔案
  • 註解:使用 #// 當作註解
  • 分隔:使用 ### 當作多個 request 之間的分隔符號
  • 發送請求:選取要發送的請求,滑鼠點右鍵,或使用快捷鍵 cmd + alt + R
  • 透過 Cmd + Shift + P 輸入 Rest Client 可以看到所有和此套件有關的命令

發送請求

query string

GET https://example.com/comments
?page=2
&pageSize=10

application/urlencoded

POST https://api.example.com/login HTTP/1.1
Content-Type: application/x-www-form-urlencoded

name=foo
&password=bar

檢視 request 紀錄

Cmd + Shift + P > View Request History

使用變數

在 Rest Client 中提供兩種類型的變數可以使用,第一種是 Custom Variables,這是透過使用者自己定義的,並且可以再細分成 Environment Variables, File VariablesRequest Variables;另一種則是 System Variables,這種變數是使用前就定義好的。

要使用 Custom Variables 的語法是 {{CustomVariableName}};使用 System Variables 的語法是 {{$SystemVariableName}},兩者主要差別在有無 $

Custom Variables

  • Environment variables:定義在 VScode 的設定檔中,因此可以在不同的 http 檔案被使用。
  • File variables:用來定義在某支 http 檔案中會共用到的常數。
  • Request variables:用來定義在某支 http 檔案中,某個 request 可能必須皆須在另一個 request 之後,例如,需要先取得 Token 才能發送的請求。

File Variables

使用 File Variables 的語法像是這樣:

@variableName = variableValue
  • 變數名稱不可包含空白
  • 變數值可以包含空白
  • 變數的值可以參照到其他變數,例如 @token = {{loginAPI.response.body.token}}
@hostname = api.example.com
@port = 8080
@host = {{hostname}}:{{port}}
@contentType = application/json
@createdAt = {{$datetime iso8601}}

###

@name = hello

GET https://{{host}}/authors/{{name}} HTTP/1.1

Request Variables

Request variables 和 file variables 很類似,它們的作用域都是在單一支 http 檔案中。定義 request variables 的方式和單行註解類似:

// @name requestName
# @name requestName

這個需要定義在 request url 之前,它後面所接的 request 可以稱做被命名的請求(Named Request),而一般的請求則是稱作匿名請求(Anonymous Request)。

在定義好 Named Request 後,其他的請求則可以參照到這個 Named Request。要取得 request variable 的方法如下:

{{requestName.(response|request).(body|headers).(*|JSONPath|XPath|Header Name)}}

舉例來說:

  • 透過 # @name login 我們定義下面這個請求的名稱為 login
@baseUrl = https://example.com/api

# @name login
POST {{baseUrl}}/api/login HTTP/1.1
Content-Type: application/x-www-form-urlencoded

name=foo&password=bar

###

@authToken = {{login.response.headers.X-AuthToken}}

# @name createComment
POST {{baseUrl}}/comments HTTP/1.1
Authorization: {{authToken}}
Content-Type: application/json

{
"content": "fake content"
}

###

@commentId = {{createComment.response.body.$.id}}

# @name getCreatedComment
GET {{baseUrl}}/comments/{{commentId}} HTTP/1.1
Authorization: {{authToken}}

###

# @name getReplies
GET {{baseUrl}}/comments/{{commentId}}/replies HTTP/1.1
Accept: application/xml

###

# @name getFirstReply
GET {{baseUrl}}/comments/{{commentId}}/replies/{{getReplies.response.body.//reply[1]/@id}}