まったりするmatayu

ツイートにゴミがついた感じのブログ

github api 叩いてユーザー情報を取得する

最終的に,こんな感じのコードを書いて取得できた.

type CredentialInfo struct {
    gorm.Model
    Login       string `json:"login"`
    AccessToken string `json:"access_token"`
    Scope       string `json:"scope"`
    TokenType   string `json:"token_type"`
}

func (c *CredentialInfo) GetGithubUserData() {

    req, err := http.NewRequest(
        "GET",
        "https://api.github.com/user",
        nil,
    )
    if err != nil {
        panic(err)
    }

    req.Header.Set("Accept", "application/json")
    req.Header.Set("Authorization", "bearer "+c.AccessToken)

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    byteArray, _ := ioutil.ReadAll(resp.Body)

    json.Unmarshal(byteArray, &c)
}

直さないといけない点

ORMにgormを使用しているが,

このままだとgorm.ModelのIDとgithub APIの方のIDが被って,IDの上書きが起こってしまう.

別の構造体を用意すれば解決する.共用する意味ないし.

つまづいた点

この記事によると

developer.github.com

user情報をrequestする時は http リクエストをGET で行わなければならない感じだが,

ずっと,POST で頑張ってた...

今回はAPIがGETリクエストを要求していたからGETにしたが,

GETとPOSTの違いがいまいちわかっていない.