2016-10-11 64 views
2

我需要重用爲我以前的請求生成的值。如何在Paw rest客戶端中重用先前請求中的變量?

例如,在第一次請求時,我對URL/api/products/{UUID}進行POST並獲得帶有空主體的代碼201(Created)的HTTP響應。

而在第二個請求我想通過請求GET/api/products/{UUID}來獲得該產品,其中UUID應該來自第一個請求。

所以,問題是如何在請求之間存儲該UUID並重用它?

回答

0

問題出在你的第一個請求的答案。只是不返回「一個空的身體。」

如果你是在談論一個REST的設計,你將返回UUID的第一個請求,客戶端將在他的第二個呼叫時使用:GET/API /產品/ {UUID}

的基本思想背後REST是,服務器不存儲關於先前請求的任何信息,並且是「無狀態的」。

我也會調整你的第一個查詢。一般來說,服務器應該生成UUID並返回它(也許你有理由打破這一點,那麼請原諒我)。你的服務器(至少有時)有一個更好的隨機生成器,你可以避免衝突。所以,你通常會設計這樣的:

CLIENT: POST /api/products/ -> Server returns: 201 {product_id: UUID(1234...)} 
Client: GET /api/products/{UUID} -> Server returns: 200 {product_detail1: ..., product_detail2: ...} 

如果你的客戶「丟失」的信息,你希望他以後能得到他的產品,你通常會實現這樣的API端點:

Client: GET /api/products/ -> Server returns: 200 [{id:UUID(1234...), title:...}, {id:UUID(5678...),, title:...}] 
+0

問題是關於特定的REST客戶端(Paw),而不是關於設計API。 – igrybkov

+0

對不起,沒有完成以前的答案。但是,沒有理由在服務器端生成UUID,因爲它可能在客戶端生成,並且僅在服務器上進行驗證。如果API端點沒有返回數據,則沒有理由將UUID從請求發送回客戶端,因爲它已經知道它。 – igrybkov

1

鑑於這樣的事情,假設在{} UUID是你更換「變量」: Original tag in URL

這可能是如此簡單,它逃過你。所有你需要做的是創建一個文本文件,說UUID.txt:

UUID in text file

(樣本數據說「12345678U910」在文件中的文本)

然後,所有你需要做的是將URL中的{UUID}替換爲文件的動態標記。刪除{UUID}部分,然後用鼠標右鍵單擊URL行它在哪裏,並選擇

添加動態價值 - >文件 - >文件內容:

Add Dynamic Value - File Content

你會得到一拖-N -drop接待窗口小部件:

File Drag-n-Drop Receiver Widget

或者按 「選擇文件...」 或拖放文件到接收器控件:

File Drag-n-Drop Receiver Widget with File

不要擔心動態變量令牌(URL中的藍色事物)不會改變...然後點擊其他地方,讓滴接收機走開,你將有你想要什麼,你可以在網址中使用或其他任何地方爲此事(報頭字段,表單域,體等)變量:

enter image description here

爪子是一個偉大的工具,當你探索動態價值的能力時,它會漸漸變得真棒。我發現的功能最強大的是正則表達式解析,它可以解析原始答覆HTML並捕獲下一個請求所需的任何內容......例如,如果您的UUID來自某個用戶輸入並被攝入服務器,則返回在html回覆中,您可以從回覆HTML中捕獲該信息,並將其重新注入URL或任何字段,甚至使用Paw的動態值功能將其添加到Cookie中。

0

@做下去,與第一請求發佈到端點沒有UUID和較爲正常的方式chickahoona的回答倒是服務器返回它。通過這種方式,您可以使用擴展名RegExpMatch從服務器的響應中提取值,並在隨後的請求中使用它。或者,如果您必須在客戶端生成UUID,那麼RegExpMatch擴展可以提供幫助,只需爲源選擇創建請求的URL並提供一個正則表達式,將UUID從其末尾剝離,例如如/([^/]+)$

第三個選項我會拋出給你,把UUID放在environment variable中,只需要你所有的請求都從那裏引用它。