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

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

ただいまの
回答率

90.53%

  • API

    1785questions

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

  • Go

    624questions

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

Go言語でRestAPIのPOSTリクエストがしたいです。

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 973

ibabababa

score 5

Go言語初心者です。普段フロント側です。

Go言語を用いて、クライアント側としてAPIを叩きたいのですが、勝手がわからず困っています。

試しにWordPressの投稿(post)APIを叩くとします。

// bodyの構造体
type Items struct {
    Title      string `json:"title"`
    Content    string `json:"content"`
    Status     string `json:"status"`
    Categories [1]int `json:"categories"`
}
// bodyの構造体
API_URL := "https://example.com/wp-json/wp/v2/posts"

// API Body の要素
title := "title"
content := "<div>content</div>"
status := "publish"
categories := [1]int{1}

// API Body の生成
items := Items{Title: title, Content: content, Status: status, Categories: categories}
json, err := json.Marshal(&items)
if err != nil {
 fmt.Print("json parce error")
}
body := []byte(json)

このようなjsonデータをpostしたいのですが、それができません。

以下は試しにpostを実装しようと書いたコードです。(うごきません)

// Post
req, err := http.NewRequest(
    "POST",
    API_URL,
    bytes.NewBuffer(data),
)
if err != nil {
    fmt.Println("url scarapping failed")
}

// Content-Type 設定
req.Header.Set("Content-Type", "application/json")
req.SetBasicAuth(USER, PASS)

client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
    fmt.Println("url scarapping failed")
}
fmt.Println(resp)
defer resp.Body.Close()

方法はいくつかあると思いますが、理解しやすいものがあれば、ご教授願いしたいです。
よろしくお願いします。

簡単なpostのサンプルコードも頂けますとありがたいです。

----追記----

確認してみたところ、認証周りのエラーが起きていましたので、修正しました。

しかし上記のfmt.Println(resp)の箇所で

&{200 OK 200 HTTP/2.0 2 0 map[Expires:[Wed, 11 Jan 1984 05:00:00 GMT] Date:[Wed, 02 Jan 2019 15:54:40 GMT] Link:[<https://kashi-time.net/wp-json/>; rel="https://
api.w.org/"] X-Robots-Tag:[noindex] Access-Control-Allow-Headers:[Authorization, Content-Type] Vary:[Accept-Encoding] Server:[nginx] Content-Type:[application/js
on; charset=UTF-8] Allow:[GET, POST, PUT, PATCH, DELETE] Access-Control-Expose-Headers:[X-WP-Total, X-WP-TotalPages] Cache-Control:[no-cache, must-revalidate, ma
x-age=0] X-Powered-By:[PHP/7.2.13] X-Content-Type-Options:[nosniff]] 0xc000126210 -1 [] false true map[] 0xc000116000 0xc00048e000}


200番ステータスが返ってきているのにも関わらず、WordPressの方で投稿されていません。
(POST自体の挙動はcurlコマンドで確認済みです。)

質問の内容が少しずれてしまいますが、この現象の理由わかりますでしょうか?
よろしくお願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • dyoshikawa

    2019/01/02 23:09

    動かないとはどういうことですか?エラーが出るならそれを貼ってください。どう動かないのかを記載して下さい。

    キャンセル

  • ibabababa

    2019/01/03 18:55

    質問内容は自己解決しました。
    エンドポイントの問題でした。

    キャンセル

  • dyoshikawa

    2019/01/03 19:03

    はい、良かったです。

    キャンセル

回答 1

0

resp.Body を確認して、レスポンス内容を確認してみたらいかがでしょう?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • API

    1785questions

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

  • Go

    624questions

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