2017-09-19 19 views
1

私はGolangプロジェクトで作業していますが、GET、PUT、POST、DELETEという外部APIでいくつかの操作を実行する必要があります。現在net/httpを使用しています。&http.Client{}を作成してGETとPUTを作成しました。これは期待どおりに動作しています。golangからDELETEエンドポイントを使用する

今、私はDELETEを実行する必要があり、それについては何も見つかりません。サポートされていますか?基本的にこのようなURLを呼び出す必要があります:

somedomain.com/theresource/:id 
Method: DELETE 

私はそれをどのように実行できますか?ここで

+3

それでは、どのように 'PUT'要求を実行するのですか? 'PUT'要求を行うことは、' DELETE'を行うこととどのように違うのでしょうか? – zerkms

+0

あなたのコードが 'DELETE'リクエストを受信して​​いない場合は、CORS(https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS)の設定が必要な場合があります。 CORSが行うことは、基本的に、 'DELETE'要求を送信する許可を求める' OPTIONS'要求を送信することです。あなたがブラウザからリクエストを送信している場合に起こります。実際の 'DELETE'リクエストが送信されていることを確認するために' curl'や 'postman'のようなツールを試すことができます。また、問題が判明した場合は、GorillaのようなGoフレームワークを使用してCORSを適切に処理できます。 –

+0

@MichałCORSは、クライアント側から発信されたリクエストのみです。 OPはサーバー側アプリケーションからhttp要求を実行するため、CORSは適用されません。 – zerkms

答えて

2

はそれを行う方法の小さな例です。

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)) 
} 
+0

これは一般的に良い答えだと思うが、私は(OPの問題を避けるためにOPを助けるために) ](http://devs.cloudimmunity.com/gotchas-and-common-mistakes-in-go-golang/#anameclose_http_resp_bodyaclosinghttpresponsebody)と[リクエストが完了すると接続を閉じる](http://devs.cloudimmunity.com/ gotchas-and-common-mist-in-go-golang /#anameclose_http_connaclosinghttpconnections)が含まれています。あなたが同じ機能でこれらのことをしたくない場合がいくつかありますが、私は通常そうする必要があります。 – Jonathan

+0

@Jonathan:これらの例のいくつかは間違っていますので、公式の文書に従ってください。はい、あなたは常に応答本文を閉じる必要がありますが、まずはエラーをチェックしてから、それを延期してください。応答オブジェクトは、エラーの場合にはまったく有効であるとは保証されません。また、一般的にはリクエストを閉じる必要はありません。 – JimB

+0

@JimB:フィードバックとあなたの考えをありがとう。公式文書に関する良い点 - 私はそのページの他の勧告のいくつかを詳しく見て、1.5より前に書かれたと思っています。確かに、古いものは参考になる情報がいくつかあるかもしれませんが、現行の公式ドキュメントに合致しないときはこの設定で共有するのには本当に適切ではありません。ありがとう – Jonathan

関連する問題