瀏覽代碼

Added a status code argument to writeJSON.

David Sissitka 12 年之前
父節點
當前提交
dd49cc45c8
共有 1 個文件被更改,包括 38 次插入100 次删除
  1. 38 100
      api.go

+ 38 - 100
api.go

@@ -71,9 +71,18 @@ func httpError(w http.ResponseWriter, err error) {
 	http.Error(w, err.Error(), statusCode)
 	http.Error(w, err.Error(), statusCode)
 }
 }
 
 
-func writeJSON(w http.ResponseWriter, b []byte) {
+func writeJSON(w http.ResponseWriter, code int, v interface{}) error {
+	b, err := json.Marshal(v)
+
+	if err != nil {
+		return err
+	}
+
 	w.Header().Set("Content-Type", "application/json")
 	w.Header().Set("Content-Type", "application/json")
+	w.WriteHeader(code)
 	w.Write(b)
 	w.Write(b)
+
+	return nil
 }
 }
 
 
 func getBoolParam(value string) (bool, error) {
 func getBoolParam(value string) (bool, error) {
@@ -106,25 +115,14 @@ func postAuth(srv *Server, version float64, w http.ResponseWriter, r *http.Reque
 		return err
 		return err
 	}
 	}
 	if status != "" {
 	if status != "" {
-		b, err := json.Marshal(&APIAuth{Status: status})
-		if err != nil {
-			return err
-		}
-		writeJSON(w, b)
-		return nil
+		return writeJSON(w, http.StatusOK, &APIAuth{Status: status})
 	}
 	}
 	w.WriteHeader(http.StatusNoContent)
 	w.WriteHeader(http.StatusNoContent)
 	return nil
 	return nil
 }
 }
 
 
 func getVersion(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
 func getVersion(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
-	m := srv.DockerVersion()
-	b, err := json.Marshal(m)
-	if err != nil {
-		return err
-	}
-	writeJSON(w, b)
-	return nil
+	return writeJSON(w, http.StatusOK, srv.DockerVersion())
 }
 }
 
 
 func postContainersKill(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
 func postContainersKill(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
@@ -167,12 +165,8 @@ func getImagesJSON(srv *Server, version float64, w http.ResponseWriter, r *http.
 	if err != nil {
 	if err != nil {
 		return err
 		return err
 	}
 	}
-	b, err := json.Marshal(outs)
-	if err != nil {
-		return err
-	}
-	writeJSON(w, b)
-	return nil
+
+	return writeJSON(w, http.StatusOK, outs)
 }
 }
 
 
 func getImagesViz(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
 func getImagesViz(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
@@ -183,13 +177,7 @@ func getImagesViz(srv *Server, version float64, w http.ResponseWriter, r *http.R
 }
 }
 
 
 func getInfo(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
 func getInfo(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
-	out := srv.DockerInfo()
-	b, err := json.Marshal(out)
-	if err != nil {
-		return err
-	}
-	writeJSON(w, b)
-	return nil
+	return writeJSON(w, http.StatusOK, srv.DockerInfo())
 }
 }
 
 
 func getEvents(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
 func getEvents(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
@@ -258,12 +246,8 @@ func getImagesHistory(srv *Server, version float64, w http.ResponseWriter, r *ht
 	if err != nil {
 	if err != nil {
 		return err
 		return err
 	}
 	}
-	b, err := json.Marshal(outs)
-	if err != nil {
-		return err
-	}
-	writeJSON(w, b)
-	return nil
+
+	return writeJSON(w, http.StatusOK, outs)
 }
 }
 
 
 func getContainersChanges(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
 func getContainersChanges(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
@@ -275,12 +259,8 @@ func getContainersChanges(srv *Server, version float64, w http.ResponseWriter, r
 	if err != nil {
 	if err != nil {
 		return err
 		return err
 	}
 	}
-	b, err := json.Marshal(changesStr)
-	if err != nil {
-		return err
-	}
-	writeJSON(w, b)
-	return nil
+
+	return writeJSON(w, http.StatusOK, changesStr)
 }
 }
 
 
 func getContainersTop(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
 func getContainersTop(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
@@ -299,12 +279,8 @@ func getContainersTop(srv *Server, version float64, w http.ResponseWriter, r *ht
 	if err != nil {
 	if err != nil {
 		return err
 		return err
 	}
 	}
-	b, err := json.Marshal(procsStr)
-	if err != nil {
-		return err
-	}
-	writeJSON(w, b)
-	return nil
+
+	return writeJSON(w, http.StatusOK, procsStr)
 }
 }
 
 
 func getContainersJSON(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
 func getContainersJSON(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
@@ -327,12 +303,8 @@ func getContainersJSON(srv *Server, version float64, w http.ResponseWriter, r *h
 	}
 	}
 
 
 	outs := srv.Containers(all, size, n, since, before)
 	outs := srv.Containers(all, size, n, since, before)
-	b, err := json.Marshal(outs)
-	if err != nil {
-		return err
-	}
-	writeJSON(w, b)
-	return nil
+
+	return writeJSON(w, http.StatusOK, outs)
 }
 }
 
 
 func postImagesTag(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
 func postImagesTag(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
@@ -374,13 +346,8 @@ func postCommit(srv *Server, version float64, w http.ResponseWriter, r *http.Req
 	if err != nil {
 	if err != nil {
 		return err
 		return err
 	}
 	}
-	b, err := json.Marshal(&APIID{id})
-	if err != nil {
-		return err
-	}
-	w.WriteHeader(http.StatusCreated)
-	writeJSON(w, b)
-	return nil
+
+	return writeJSON(w, http.StatusCreated, &APIID{id})
 }
 }
 
 
 // Creates an image from Pull or from Import
 // Creates an image from Pull or from Import
@@ -434,12 +401,8 @@ func getImagesSearch(srv *Server, version float64, w http.ResponseWriter, r *htt
 	if err != nil {
 	if err != nil {
 		return err
 		return err
 	}
 	}
-	b, err := json.Marshal(outs)
-	if err != nil {
-		return err
-	}
-	writeJSON(w, b)
-	return nil
+
+	return writeJSON(w, http.StatusOK, outs)
 }
 }
 
 
 func postImagesInsert(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
 func postImagesInsert(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
@@ -464,12 +427,8 @@ func postImagesInsert(srv *Server, version float64, w http.ResponseWriter, r *ht
 			return nil
 			return nil
 		}
 		}
 	}
 	}
-	b, err := json.Marshal(&APIID{ID: imgID})
-	if err != nil {
-		return err
-	}
-	writeJSON(w, b)
-	return nil
+
+	return writeJSON(w, http.StatusOK, &APIID{ID: imgID})
 }
 }
 
 
 func postImagesPush(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
 func postImagesPush(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
@@ -606,11 +565,7 @@ func deleteImages(srv *Server, version float64, w http.ResponseWriter, r *http.R
 	}
 	}
 	if imgs != nil {
 	if imgs != nil {
 		if len(imgs) != 0 {
 		if len(imgs) != 0 {
-			b, err := json.Marshal(imgs)
-			if err != nil {
-				return err
-			}
-			writeJSON(w, b)
+			return writeJSON(w, http.StatusOK, imgs)
 		} else {
 		} else {
 			return fmt.Errorf("Conflict, %s wasn't deleted", name)
 			return fmt.Errorf("Conflict, %s wasn't deleted", name)
 		}
 		}
@@ -673,12 +628,8 @@ func postContainersWait(srv *Server, version float64, w http.ResponseWriter, r *
 	if err != nil {
 	if err != nil {
 		return err
 		return err
 	}
 	}
-	b, err := json.Marshal(&APIWait{StatusCode: status})
-	if err != nil {
-		return err
-	}
-	writeJSON(w, b)
-	return nil
+
+	return writeJSON(w, http.StatusOK, &APIWait{StatusCode: status})
 }
 }
 
 
 func postContainersResize(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
 func postContainersResize(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
@@ -820,12 +771,8 @@ func getContainersByName(srv *Server, version float64, w http.ResponseWriter, r
 	if err != nil {
 	if err != nil {
 		return err
 		return err
 	}
 	}
-	b, err := json.Marshal(container)
-	if err != nil {
-		return err
-	}
-	writeJSON(w, b)
-	return nil
+
+	return writeJSON(w, http.StatusOK, container)
 }
 }
 
 
 func getImagesByName(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
 func getImagesByName(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
@@ -838,12 +785,8 @@ func getImagesByName(srv *Server, version float64, w http.ResponseWriter, r *htt
 	if err != nil {
 	if err != nil {
 		return err
 		return err
 	}
 	}
-	b, err := json.Marshal(image)
-	if err != nil {
-		return err
-	}
-	writeJSON(w, b)
-	return nil
+
+	return writeJSON(w, http.StatusOK, image)
 }
 }
 
 
 func postImagesGetCache(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
 func postImagesGetCache(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
@@ -860,13 +803,8 @@ func postImagesGetCache(srv *Server, version float64, w http.ResponseWriter, r *
 		w.WriteHeader(http.StatusNotFound)
 		w.WriteHeader(http.StatusNotFound)
 		return nil
 		return nil
 	}
 	}
-	apiID := &APIID{ID: image.ID}
-	b, err := json.Marshal(apiID)
-	if err != nil {
-		return err
-	}
-	writeJSON(w, b)
-	return nil
+
+	return writeJSON(w, http.StatusOK, &APIID{ID: image.ID})
 }
 }
 
 
 func postBuild(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
 func postBuild(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {