diff --git a/api.go b/api.go new file mode 100644 index 0000000..219491b --- /dev/null +++ b/api.go @@ -0,0 +1,38 @@ +package main + +import ( + "encoding/json" + "net/http" +) + +type JsonHandler func(http.ResponseWriter, *http.Request) + +func (h JsonHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { + w.Header().Set("Content-Type", "application/json") + h(w, req) +} + +type JSONError struct { + Reason string `json:"reason"` +} + +type JSONMessage struct { + Message string `json:"message"` +} + +func apiInfo(w http.ResponseWriter, req *http.Request) { + version := struct { + Version string `json:"version"` + Name string `json:"name"` + Routes []string `json:"routes"` + }{ + Version: "0.1", + Name: "itslog", + Routes: []string{ + "/api/v0/info/", + }, + } + if err := json.NewEncoder(w).Encode(version); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + } +} diff --git a/main.go b/main.go index 014acff..46c31fd 100644 --- a/main.go +++ b/main.go @@ -1,8 +1,10 @@ package main import ( + "fmt" "github.com/kelseyhightower/envconfig" "log" + "net/http" ) func main() { @@ -16,4 +18,11 @@ func main() { log.Fatal(err) } log.Printf("%+v", config) + + http.Handle("/api/v0/info/", JsonHandler(apiInfo)) + + err = http.ListenAndServe(fmt.Sprintf(":%d", config.Port), nil) + if err != nil { + log.Fatal(err) + } }