Créez facilement un serveur API à l'aide du module go-json-rest

Dépôt

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

Programme pour afficher 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

Créez facilement un serveur API à l'aide du module go-json-rest
Essayez de créer un serveur HTTP en utilisant Node.js
Un moyen simple de créer un module d'importation avec jupyter
Créer un pseudo serveur d'API REST à l'aide de pages GitHub
J'ai essayé de créer l'API Quip
Créez une API en utilisant hug avec mod_wsgi
Créer une API CRUD à l'aide de l'API rapide
[Python] Créer une API pour envoyer Gmail
Créer un module Python [CarSensor API support module csapi]
Créer un graphique à l'aide du module Sympy
Créer une application à l'aide de l'API Spotify
Comment afficher la carte à l'aide de l'API Google Map (Android)
Procédure pour utiliser l'API WEB de TeamGant (en utilisant python)
Créons une API REST en utilisant SpringBoot + MongoDB
Un moyen facile de tracer un diagramme HR à l'aide d'une requête
Ecrire un serveur TCP à l'aide du module SocketServer
Comment obtenir des données d'article à l'aide de l'API Qiita
Exemple de serveur d'API qui reçoit JSON dans Golang
Comment créer une API Rest dans Django
Comment désinstaller un module installé à l'aide de setup.py
Préparer un pseudo serveur API à l'aide d'actions GitHub
Créez rapidement un serveur API avec Python + Falcon
Comment créer des nombres aléatoires avec le module aléatoire de NumPy
J'ai essayé de fonctionner à partir de Postman en utilisant Cisco Guest Shell comme serveur API
[Rails] Comment obtenir des informations de localisation à l'aide de l'API de géolocalisation
Pré-traitement pour construire un modèle seq2seq à l'aide de l'API fonctionnelle de Keras
Erreur fatale dans le lanceur: impossible de créer le processus avec '"'
Notification PUSH de Python vers Android à l'aide de l'API de Google
Un moyen facile de gratter avec Python en utilisant Google Colab
Essayez de créer une API RESTful avec MVC à l'aide de Flask 1.0.2
Erreur fatale dans le lanceur: impossible de créer le processus avec '"'
Écrire des données dans KINTONE à l'aide du module de requêtes Python
Essayez de supprimer des tweets en masse à l'aide de l'API de Twitter
Publiez sur votre compte en utilisant l'API sur Twitter
Apprendre un réseau neuronal à l'aide de Chainer
Comment créer un simple script serveur / client TCP
Comment analyser avec Google Colaboratory à l'aide de l'API Kaggle
Mémo d'utilisation facile de l'API OpenStack Swift utilisant swiftclient
Un script qui facilite la création de menus riches avec l'API de messagerie LINE