質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

621閲覧

Go言語でjsonAPIを開発する

KazumaInoue

総合スコア10

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2020/04/18 15:30

編集2020/04/18 18:35

前提・実現したいこと

標準パッケージのみでjsonAPIを開発したいです。
ある程度まで調べ、コーディングしてみましたが結果が得られません。

どのように実装すればいいか教えていただきたいです。

発生している問題・エラーメッセージ

?name=abc
でPOSTしても、データが表示できない。

該当のソースコード

test.go

1package main 2 3import ( 4 "encoding/json" 5 "fmt" 6 // "io/ioutil" 7 "net/http" 8 // "Request.Body" 9 10 // ? 11 "bytes" 12 // ? 13 "io" 14) 15 16// jsonのSchema 17type InputJsonSchema struct { 18 Name string `json:"name"` 19} 20 21func main() { 22 http.HandleFunc("/user/create", func(w http.ResponseWriter, r *http.Request) { 23 // request bodyの読み取り 24 25 //test 26 fmt.Fprintf(w, "<h1>Test</h1>") 27 28 switch r.Method { 29 case http.MethodGet: 30 w.WriteHeader(http.StatusOK) 31 fmt.Fprint(w, "GET hello!\n") 32 33 34 case http.MethodPost: 35 // w.WriteHeader(http.StatusCreated) 36 fmt.Fprint(w, "POST hello!\n") 37 38 body := r.Body 39 defer body.Close() 40 41 buf := new(bytes.Buffer) 42 io.Copy(buf, body) 43 44 45 var hello InputJsonSchema 46 json.Unmarshal(buf.Bytes(), &hello) 47 48 // w.WriteHeader(http.StatusCreated) 49 // fmt.Fprint(w, "POST hello! %v \n", hello.Name) 50 fmt.Printf("POST hello! %v \n", hello) 51 52 default: 53 w.WriteHeader(http.StatusMethodNotAllowed) 54 fmt.Fprint(w, "Method not allowed.\n") 55 56 // ody := r.Body 57 58 } 59 }) 60 61 http.ListenAndServe(":8080", nil) 62}

実行結果

API server listening at: 127.0.0.1:10290 POST hello! {}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Go の実装としては出力できるようになっていますが、リクエストが正しくないです。

?name=abc
でPOSTしても、データが表示できない。

上記はリクエストパラメータとして値を送信しているので、 json を受け取るには json を curl で送信しましょう

curl

1curl -X POST -H "Content-Type: application/json" -d '{"Name":"abc"}' http://localhost:8080/user/create 2// POST hello! {abc}

投稿2020/04/18 21:36

d_tutuz

総合スコア730

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

d_tutuz

2020/04/19 03:01

(もちろんリスエストはcurlでなくても良いです)
KazumaInoue

2020/04/19 07:53

上記コマンドをコピべさせていただいたのですが やはり変わらず POST hello! {} でした。。
d_tutuz

2020/04/19 09:06 編集

Windows環境でしょうか。その場合は ' を使うことができないので以下のようなコマンドになります。 curl -X POST -H "Content-Type: application/json" -d "{\"name\":\"abc\"}" http://localhost:8080/user/create
KazumaInoue

2020/04/19 09:51

ひええ。 無知すぎました。 無事、期待した実行結果が返ってきました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問