[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 Variables 和 Request 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}}