가장 간단한 Go API 서버
16195 단어 Go
가장 간단한 Go API 서버
우선
이번 작업은 방문 후 운세를 되돌려주는 신싸인 서버입니다!GET '/oracle'
이면 JSON으로 상태 코드와 운세를 되돌려 주는 것을 만든다.
"net/http" 를 사용하여 서버 구축
실제로 나는 서버를 구축하고 싶다.net/http
패키지를 사용하면 서버를 쉽게 구축할 수 있습니다.
다음은 메인에 쓰여있습니다. localhost:8080
http 서버가 있습니다!아주 간단해요.http.ListenAndServe(":8080", nil)
그리고 접근 "/"
시 일부 내용을 표시하기 위해 프로세서를 추가합니다.func rootHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "<h1>Oracle</h1>")
}
func main() {
http.HandleFunc("/", rootHandler)
log.Fatal(http.ListenAndServe(":8080", nil))
}
이 http.HandleFunc()
는 첫 번째 매개 변수를 통해 두 번째 매개 변수로 처리됩니다.
이 함수는 DefaultServeMux
에서 첫 번째 매개 변수에 제공된 모드 등록 http 처리 프로그램입니다.func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) {
DefaultServeMux.HandleFunc(pattern, handler)
}
이 http 프로세서는 인터페이스에서 패키지에 정의된 첫 번째 파라미터ResponseWriter
, 두 번째 파라미터*Request
의 ServeHTTP입니다.type Handler interface {
ServeHTTP(ResponseWriter, *Request)
}
즉, 정의식 형식으로 처리 프로그램(e.g.rootHandler
을 실현하면 Handler 유형이 되고 http.hundleFunc()
의 두 번째 매개 변수가 될 수 있다.
(여기서 먼저 ServeHTTP
어떤 사람인지 조용히 옆에 두세요.)func rootHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "<h1>Oracle</h1>")
}
어쨌든 이렇게 go run fileName
하면 localhost:8080
방문할 수 있다.
액세스하면 H1 레이블의 모양에 Oracle 문자열이 표시됩니다.
JSON 돌려줘.
그럼 본론.
JSON으로 돌아가는 프로세서를 실현하세요.
이번에는 JSON이 돌아올지 확인하기 위해서 잠시 브라우저에 표시하고 싶습니다.
먼저 struct
로 데이터를 정의합니다.(C를 아는 사람은 잘 아는 struct)type ResponseData struct {
Status int `json:"status"`
Data string `json:"data"`
}
이번에 반한 곳이 하나 있다.
Go 사양은 struct
등 변수의 시작 문자를 대문자로 설정하면 다른 패키지에서 액세스할 수 있고 소문자로 설정하면 패키지에서 액세스할 수 있습니다.
처음에 밑줄에 struct
내의 변수를 썼을 때 화면에 빈 데이터가 표시됩니다.
포장 안에서도 출력할 때 반드시 상자로 써야 한다.
길어졌어.
다음은 http 처리 프로그램의 실현이다."/"
때와 같이 프로세서를 등록합니다.
또 이번에는 추첨이기 때문에 무작위로 세어야 한다.
따라서main 함수를 실행할 때마다seed를 설정합니다.func main() {
rand.Seed(time.Now().UnixNano())
http.HandleFunc("/oracle", oracleHandler)
http.HandleFunc("/", rootHandler)
log.Fatal(http.ListenAndServe(":8080", nil))
}
그럼 oracleHandler
의 내용을 살펴보자.
우선, 서명 형식을 저장하는 문자열 그룹을 정의합니다.
여기const
에서 사용하고 싶은데 여러 가지가 있는데 가장 간단하게 설치할 수 있어요.
그리고 ResponseDate
형 성명 변수response로 상태 코드 200과 아까 수조에 랜덤수(0~6)를 대입하여 얻은 운세를 초기화합니다."encoding/json"
패키지를 사용하여 response를 JSON으로 인코딩합니다.
인코딩된 데이터와 오류가 반환값으로 반환됩니다.
우선, 이 오류를 사용하여 간단한 이상 처리를 합니다.json.Marshal
우수하다
func rootHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "<h1>Oracle</h1>")
}
func main() {
http.HandleFunc("/", rootHandler)
log.Fatal(http.ListenAndServe(":8080", nil))
}
func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) {
DefaultServeMux.HandleFunc(pattern, handler)
}
type Handler interface {
ServeHTTP(ResponseWriter, *Request)
}
func rootHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "<h1>Oracle</h1>")
}
type ResponseData struct {
Status int `json:"status"`
Data string `json:"data"`
}
func main() {
rand.Seed(time.Now().UnixNano())
http.HandleFunc("/oracle", oracleHandler)
http.HandleFunc("/", rootHandler)
log.Fatal(http.ListenAndServe(":8080", nil))
}
"net/http"
http.StatusOK === 200
마지막으로 매개변수 사용
http.StatusInternalServerError === 500
HTTP 응답 헤더에 JSON으로 되돌아오는 가슴을 쓰고 문자열에 재생된 데이터를 응답에 씁니다.여기서 문자열 분배는
w http.ResponseWriter
bytes 형식의 데이터 처리이기 때문이다.func oracleHandler(w http.ResponseWriter, r *http.Request) {
// "/oracle"
oracles := []string{"大吉", "中吉", "小吉", "末吉", "吉", "凶", "大凶"}
response := ResponseData{http.StatusOK, oracles[rand.Intn(7)]}
res, err := json.Marshal(response)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "application/json")
fmt.Fprint(w, string(res))
}
이렇게 하면 완성된다.API에 실제로 요청을 제출합니다.
이런 식으로 호응 받을 수 있잖아.
마지막으로 원본 코드를 넣으세요.
소스 코드
import (
"encoding/json"
"fmt"
"log"
"math/rand"
"net/http"
"time"
)
type ResponseData struct {
Status int `json:"status"`
Data string `json:"data"`
}
func oracleHandler(w http.ResponseWriter, r *http.Request) {
// "/oracle"
oracles := []string{"大吉", "中吉", "小吉", "末吉", "吉", "凶", "大凶"}
response := ResponseData{http.StatusOK, oracles[rand.Intn(7)]}
res, err := json.Marshal(response)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "application/json")
fmt.Fprint(w, string(res))
}
func rootHandler(w http.ResponseWriter, r *http.Request) {
// "/"
fmt.Fprintf(w, "<h1>Oracle</h1>")
}
func main() {
rand.Seed(time.Now().UnixNano())
http.HandleFunc("/oracle", oracleHandler)
http.HandleFunc("/", rootHandler)
log.Fatal(http.ListenAndServe(":8080", nil))
}
마지막
마지막 여러분, 이 졸렬한 보도를 보고 죄송합니다. 감사합니다.
첫 기사라서 원래 조금 더 좋은 걸로 만들고 싶어요!!
Reference
이 문제에 관하여(가장 간단한 Go API 서버), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/rechtburg/items/b5eed25719582d7f490d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)