より詳細な、より良いメンテナンス


あなたがhereをチェックすることができるこのポストでわかるすべてのコード
最後のポストでは、我々のコントローラの応答にコンテンツを配信しましたが、あまりにも読めないコードです.このポストでは、我々はより読みやすく、我々のコンテンツを提供するために簡単にコードを再表示します.
CMD/HTTPフォルダ内でヘルパーと呼ばれる新しいフォルダを作成します.このパッケージは、HTTP層が我々のプロジェクトの他のハンドラーによって使用される要求と応答に対処するのを助けるためにグループ機能を利用します.
まず第一に、CMD/http/bookで我々のブックハンドラをrefactにしてください.どのように我々のゲールがそうであるかについて見てください
func (f FeiraHandler) getAll(w http.ResponseWriter, r *http.Request) {
    feiraFilter := getFilterQuery(r)
    if results, err := f.service.GetAll(feiraFilter); err != nil {
        helper.HandleError(w, err) //1
    } else {
        if results != nil && len(results) > 0 {
            helper.JsonResponse(w, results, http.StatusOK) //2
        } else {
            helper.NoContent(w) //3
        }
    }
}
今ヘルパーは、エラーに対処し、応答データを使用するのに役立ちます.
ヘルパーパッケージでは、レスポンスを作成します.を返します.ファイルを移動します.
3 -ここでは、より簡単な方法を開始します.
//cmd/http/helper/response.go
//...
func NoContent(w http.ResponseWriter) {
    addDefaultHeaders(w)
    w.WriteHeader(http.StatusNoContent)
}
我々は、デフォルトのヘッダーを追加し、コンテンツのステータスにヘッダーを送信します.
2 -我々は、応答にJSONデータを書きます
//cmd/http/helper/response.go
//...
func JsonResponse(w http.ResponseWriter, data interface{}, httpStatus int) {
    addDefaultHeaders(w)
    w.WriteHeader(httpStatus)
    writeData(w, data)
}
また、ヘルパーパッケージの新しい機能にデータを書き込むために、ボイラープレートコードを移動します.
1 -今、私たちはプロセスを改善するために私たちのエラーメソッドを再確認します.
//cmd/http/helper/response.go
//...
func HandleError(w http.ResponseWriter, err error) {
    addDefaultHeaders(w)
    httpError := DealWith(err)
    w.WriteHeader(httpError.Status)

    if httpError.Status != http.StatusNoContent {
        writeData(w, httpError)
    }
}
このメソッドは、エラーが登録エラーまたはアプリケーションに予期しないエラーであるかどうかを確認します.
現時点でエラーを作成します.私たちのコードのための取引方法を作成するヘルパーフォルダーの内部に行く任意のエラーなしで動作します.
//cmd/http/helper/error.go
//...
type HttpError struct {
    Status      int      `json:"-"`
    Description string   `json:"description,omitempty"`
    Messages    []string `json:"messages,omitempty"`
}

func DealWith(err error) HttpError {

    return HttpError{
        Status:      http.StatusInternalServerError,
        Description: "Internal error, please report to admin",
    }
}
次のポストでは、HTTP層でエラーを生成するより良い方法を知るために、DealWareメソッドを説明します.