Erstellen Sie einfach einen API-Server mit dem Modul go-json-rest

Repository

https://github.com/ant0ine/go-json-rest

Programm zur Anzeige von Hello World

main.go


package main

import (
        "github.com/ant0ine/go-json-rest/rest"
        "log"
        "net/http"
)

func main() {
        api := rest.NewApi()
        api.Use(rest.DefaultDevStack...)
        api.SetApp(rest.AppSimple(func(w rest.ResponseWriter, r *rest.Request) {
                w.WriteJson(map[string]string{"Body": "Hello World!"})
        }))
        log.Fatal(http.ListenAndServe(":8080", api.MakeHandler()))
}
yuta:~ $ curl -i http://127.0.0.1:8080/
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
X-Powered-By: go-json-rest
Date: Sun, 01 Nov 2020 00:54:41 GMT
Content-Length: 28

{
  "Body": "Hello World!"
}yuta:~ $ 

POST,GET,DELETE

main.go


package main

import (
        "github.com/ant0ine/go-json-rest/rest"
        "log"
        "net/http"
        "sync"
)

func main() {
        api := rest.NewApi()
        api.Use(rest.DefaultDevStack...)
        router, err := rest.MakeRouter(
                rest.Get("/countries", GetAllCountries),
                rest.Post("/countries", PostCountry),
                rest.Get("/countries/:code", GetCountry),
                rest.Delete("/countries/:code", DeleteCountry),
        )
        if err != nil {
                log.Fatal(err)
        }
        api.SetApp(router)
        log.Fatal(http.ListenAndServe(":8080", api.MakeHandler()))
}

type Country struct {
        Code string
        Name string
}

var store = map[string]*Country{}

var lock = sync.RWMutex{}

func GetCountry(w rest.ResponseWriter, r *rest.Request) {
        code := r.PathParam("code")

        lock.RLock()
        var country *Country
        if store[code] != nil {
                country = &Country{}
                *country = *store[code]
        }
        lock.RUnlock()

        if country == nil {
                rest.NotFound(w, r)
                return
        }
        w.WriteJson(country)
}

func GetAllCountries(w rest.ResponseWriter, r *rest.Request) {
        lock.RLock()
        countries := make([]Country, len(store))
        i := 0
        for _, country := range store {
                countries[i] = *country
                i++
        }
        lock.RUnlock()
        w.WriteJson(&countries)
}

func PostCountry(w rest.ResponseWriter, r *rest.Request) {
        country := Country{}
        err := r.DecodeJsonPayload(&country)
        if err != nil {
                rest.Error(w, err.Error(), http.StatusInternalServerError)
                return
        }
        if country.Code == "" {
                rest.Error(w, "country code required", 400)
                return
        }
        if country.Name == "" {
                rest.Error(w, "country name required", 400)
                return
        }
        lock.Lock()
        store[country.Code] = &country
        lock.Unlock()
        w.WriteJson(&country)
}

func DeleteCountry(w rest.ResponseWriter, r *rest.Request) {
        code := r.PathParam("code")
        lock.Lock()
        delete(store, code)
        lock.Unlock()
        w.WriteHeader(http.StatusOK)
}

POST

yuta:~ $ curl -i -H 'Content-Type: application/json' \
>     -d '{"Code":"FR","Name":"France"}' http://127.0.0.1:8080/countries
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
X-Powered-By: go-json-rest
Date: Sun, 01 Nov 2020 00:59:38 GMT
Content-Length: 38

{
  "Code": "FR",
  "Name": "France"
}yuta:~ $ 

GET

yuta:~ $ curl -i http://127.0.0.1:8080/countries/FR
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
X-Powered-By: go-json-rest
Date: Sun, 01 Nov 2020 01:01:02 GMT
Content-Length: 38

{
  "Code": "FR",
  "Name": "France"
}yuta:~ $ 

DELETE

yuta:~ $ curl -i -X DELETE http://127.0.0.1:8080/countries/FR
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
X-Powered-By: go-json-rest
Date: Sun, 01 Nov 2020 01:01:35 GMT
Content-Length: 0

yuta:~ $ curl -i http://127.0.0.1:8080/countries/FR
HTTP/1.1 404 Not Found
Content-Type: application/json; charset=utf-8
X-Powered-By: go-json-rest
Date: Sun, 01 Nov 2020 01:01:41 GMT
Content-Length: 35

{
  "Error": "Resource not found"
}yuta:~ $ 
yuta:~ $ ^C

Recommended Posts

Erstellen Sie einfach einen API-Server mit dem Modul go-json-rest
Versuchen Sie, mit Node.js einen HTTP-Server zu erstellen
Eine einfache Möglichkeit, ein Importmodul mit jupyter zu erstellen
Erstellen Sie mit GitHub Pages einen Pseudo-REST-API-Server
Ich habe versucht, eine Quip-API zu erstellen
Erstellen Sie eine API mit hug mit mod_wsgi
Erstellen Sie die CRUD-API mit der Fast API
[Python] API zum Senden von Google Mail erstellen
Python-Modul erstellen [CarSensor API-Unterstützungsmodul csapi]
Erstellen Sie mit dem Sympy-Modul ein Diagramm
Erstellen Sie eine Anwendung mit der Spotify-API
So zeigen Sie eine Karte mit der Google Map API (Android) an
Vorgehensweise zur Verwendung der WEG-API von TeamGant (mit Python)
Erstellen wir eine REST-API mit SpringBoot + MongoDB
Einfache Möglichkeit, ein HR-Diagramm mithilfe von Astroquery zu zeichnen
Schreiben Sie einen TCP-Server mit dem SocketServer-Modul
So erhalten Sie Artikeldaten mithilfe der Qiita-API
Beispiel-API-Server, der JSON in Golang empfängt
So erstellen Sie eine Rest-API in Django
So deinstallieren Sie ein mit setup.py installiertes Modul
Bereiten Sie einen Pseudo-API-Server mit GitHub-Aktionen vor
Erstellen Sie schnell einen API-Server mit Python + Falcon
Wie man Zufallszahlen mit dem Zufallsmodul von NumPy macht
Ich habe versucht, von Postman aus mit Cisco Guest Shell als API-Server zu arbeiten
[Rails] So erhalten Sie Standortinformationen mithilfe der Geolocation-API
Vorverarbeitung zum Erstellen eines seq2seq-Modells unter Verwendung der Funktions-API von keras
Schwerwiegender Fehler im Launcher: Prozess kann nicht mit '"' erstellt werden
PUSH-Benachrichtigung von Python an Android mithilfe der Google-API
Einfache Möglichkeit, mit Google Colab mit Python zu kratzen
Versuchen Sie, mit MVC eine RESTful-API mit Flask 1.0.2 zu erstellen
Schwerwiegender Fehler im Launcher: Prozess kann nicht mit '"' erstellt werden
Schreiben Sie Daten mit dem Python-Anforderungsmodul in KINTONE
Versuchen Sie, Tweets mithilfe der Twitter-API in großen Mengen zu löschen
Posten Sie mit der API auf Twitter in Ihrem Konto
Lernen eines neuronalen Netzes mit Chainer - Erstellen eines Web-API-Servers
So erstellen Sie ein einfaches TCP-Server / Client-Skript
Analysieren mit Google Colaboratory mithilfe der Kaggle-API
Benutzerfreundliches Memo der OpenStack Swift API mit swiftclient
Ein Skript, mit dem Sie mit der LINE Messaging-API auf einfache Weise umfangreiche Menüs erstellen können