오늘도 한 뼘 더

[Golang] net/http 패키지로 API 호출하기 본문

Study/Go

[Golang] net/http 패키지로 API 호출하기

나른한댕댕이🐶 2022. 9. 3. 11:31
728x90
반응형

  # 배경  

Go 코드로 간단하게 API를 호출하고 싶다. Go에서 http 패키지를 지원하여 해당 패키지를 사용하여 API 호출을 해보도록 한다. 

 

  # net/http 패키지  

https://pkg.go.dev/net/http

 

http package - net/http - Go Packages

HTTP Trailers are a set of key/value pairs like headers that come after the HTTP response, instead of before. package main import ( "io" "net/http" ) func main() { mux := http.NewServeMux() mux.HandleFunc("/sendstrailers", func(w http.ResponseWriter, req *

pkg.go.dev

 

  # POST API 사용하기  

  • http.Post 사용
 resp, err := http.Post(url(string), content-type (string), &buf)

필자는 Content-type을 application/json으로 설정하여 json으로 값을 변경해야 했다. 

  • json.marshal
 marshal, err := json.Marshal(map[string]string{"text": fmt.Sprintf("%+v", err)})
 if err != nil {
     log.Fatal("Json Marshal Error: ",err)
 }
 requestBody := bytes.NewBuffer(marshal)

 

 

main.go [예시]

  • DB 연결을 하는 중에 에러가 나서 해당 에러를 slack으로 보내는 예시이다.
package main

import (
	"bytes"
	"database/sql"
	"encoding/json"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"log"
	"net/http"
	"os"
)

func main()  {
	ConnectionString := fmt.Sprintf("%s:%s@tcp(%s:3306)/%s",
		os.Getenv("DB_USER"), os.Getenv("DB_PASSWORD"), os.Getenv("DB_HOST"), os.Getenv("DB_NAME"))

	db, err := sql.Open("mysql", ConnectionString)
	if err != nil {
		marshal, err := json.Marshal(map[string]string{"text": fmt.Sprintf("%+v", err)})
		if err != nil {
			log.Fatal("Json Marshal Error: ",err)
		}
		requestBody := bytes.NewBuffer(marshal)

		resp, err := http.Post("https://hooks.slack.com/", "application/json", requestBody)
		if err != nil {
			log.Fatal(err)
		}
		defer resp.Body.Close()
		fmt.Print("Error : ", err)
	}
	db.Close()
}
728x90
반응형
Comments