我在一個Golang項目中工作,我需要通過外部API執行一些操作:GET,PUT,POST和DELETE。目前正在使用net/http
我創建了一個&http.Client{}
來進行GET和PUT,即按預期工作。從golang消費DELETE端點
現在我需要執行一個DELETE,我找不到任何關於它的東西,它是否支持?我需要基本上調用這樣的網址:
somedomain.com/theresource/:id
Method: DELETE
我該如何執行該操作?
我在一個Golang項目中工作,我需要通過外部API執行一些操作:GET,PUT,POST和DELETE。目前正在使用net/http
我創建了一個&http.Client{}
來進行GET和PUT,即按預期工作。從golang消費DELETE端點
現在我需要執行一個DELETE,我找不到任何關於它的東西,它是否支持?我需要基本上調用這樣的網址:
somedomain.com/theresource/:id
Method: DELETE
我該如何執行該操作?
這裏是如何做到這一點的一個小例子:
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func sendRequest() {
// Request (DELETE http://www.example.com/bucket/sample)
// Create client
client := &http.Client{}
// Create request
req, err := http.NewRequest("DELETE", "http://www.example.com/bucket/sample", nil)
if err != nil {
fmt.Println(err)
return
}
// Fetch Request
resp, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
// Read Response Body
respBody, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println(err)
return
}
// Display Results
fmt.Println("response Status : ", resp.Status)
fmt.Println("response Headers : ", resp.Header)
fmt.Println("response Body : ", string(respBody))
}
我認爲這是一個很好的答案,但我會建議(爲了幫助OP避免問題的下行)改變幾件事情:[關閉響應機構](http://devs.cloudimmunity.com/gotchas-and-common-mistakes-in-go-golang/#anameclose_http_resp_bodyaclosinghttpresponsebody)和[請求完成後關閉連接](http://devs.cloudimmunity.com/陷阱和常見-錯誤 - 在-GO-golang /#anameclose_http_connaclosinghttpconnections)。有幾種情況你不想用同樣的功能做這些事情,但我通常需要。 – Jonathan
@Jonathan:其中一些例子不正確,你應該遵循官方文檔。是的,你應該總是關閉響應主體,但是_always_先檢查錯誤,然後推遲;在出現錯誤的情況下,響應對象不保證有效。你通常也不應該關閉請求。 – JimB
@JimB:感謝您的反饋和您的想法。關於官方文檔的好處 - 我仔細研究了該頁面上的其他一些建議,並認爲它們是在1.5之前編寫的。當然,一些古老的東西可能會有一些有用的信息塊,但當它們不符合當前的官方文檔時,並不適合在這種環境中分享。謝謝 – Jonathan
那麼,你如何執行'PUT'要求?如何使一個'PUT'請求與創建一個'DELETE'不同? – zerkms
只是一個猜測,但如果你的代碼沒有收到'DELETE'請求,你可能需要配置CORS(https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS)。 CORS做的基本上是發送一個'OPTIONS'請求,要求發送'DELETE'請求的權限。如果您從瀏覽器發送請求,會發生這種情況。您可以嘗試使用'curl'或'postman'等工具來確保發送實際的DELETE請求。另外,如果事實證明是問題所在,你可以使用像Gorilla這樣的Go框架來正確處理CORS。 –
@MichałCORS僅適用於客戶端發起的請求。 OP從服務器端應用程序執行http請求,因此CORS不適用。 – zerkms