31 lines
		
	
	
		
			750 B
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			31 lines
		
	
	
		
			750 B
		
	
	
	
		
			Go
		
	
	
	
| // Package http provides the logic of the webserver
 | |
| package http
 | |
| 
 | |
| import (
 | |
| 	"encoding/json"
 | |
| 	"errors"
 | |
| 	"net/http"
 | |
| 	"strings"
 | |
| )
 | |
| 
 | |
| // Read data from a http request via json format (input)
 | |
| func Read(r *http.Request, to interface{}) (err error) {
 | |
| 	if !strings.Contains(r.Header.Get("Content-Type"), "application/json") {
 | |
| 		err = errors.New("no json request received")
 | |
| 		return
 | |
| 	}
 | |
| 	err = json.NewDecoder(r.Body).Decode(to)
 | |
| 	return
 | |
| }
 | |
| 
 | |
| // Write data as json to a http response (output)
 | |
| func Write(w http.ResponseWriter, data interface{}) {
 | |
| 	js, err := json.Marshal(data)
 | |
| 	if err != nil {
 | |
| 		http.Error(w, "failed to encode response: "+err.Error(), http.StatusInternalServerError)
 | |
| 		return
 | |
| 	}
 | |
| 	w.Header().Set("Content-Type", "application/json")
 | |
| 	w.Write(js)
 | |
| }
 |