errcode

package
v1.10.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 20, 2024 License: MIT Imports: 10 Imported by: 6

README

errcode

Error codes usually include system-level error codes and business-level error codes, consisting of a total of 5 decimal digits, e.g. 20101

First digit Middle two digits Last two digits
For http error codes, 2 indicates a business-level error (1 is a system-level error) Service Module Code Specific error codes
For grpc error codes, 4 indicates a business-level error (3 is a system-level error) Service Module Code Specific error codes
  • Error levels occupy one digit: 1 (http) and 3 (grpc) indicate system-level errors, 2 (http) and 4 (grpc) indicate business-level errors, usually caused by illegal user operations.
  • Double-digit service modules: A large system usually has no more than two service modules; if it exceeds that, it's time to split the system.
  • Error codes take up two digits: prevents a module from being customised with too many error codes, which are not well maintained later.

Example of use

Example of http error code usage

Web services created based on SQL, use the following error code:

    import "github.com/zhufuyi/sponge/pkg/gin/response"

    // return error
    response.Error(c, ecode.InvalidParams)
    // rewrite error messages
    response.Error(c, ecode.InvalidParams.RewriteMsg("custom error message"))

    // convert error code to standard http status code
    response.Out(c, ecode.InvalidParams)
    // convert error code to standard http status code, and rewrite error messages
    response.Out(c, ecode.InvalidParams.RewriteMsg("custom error message"))

Web services created based on Protobuf, use the following error code:

    // return error
    return nil, ecode.InvalidParams.Err()
    // rewrite error messages
    return nil, ecode.InvalidParams.Err("custom error message")

    // convert error code to standard http status code
    return nil, ecode.InvalidParams.ErrToHTTP()
    // convert error code to standard http status code, and rewrite error messages
    return nil, ecode.InvalidParams.ErrToHTTP("custom error message")

Example of grpc error code usage

    // return error
    return nil, ecode.StatusInvalidParams.Err()
    // rewrite error messages
    return nil, ecode.StatusInvalidParams.Err("custom error message")

    // convert error code to standard grpc status code
    return nil, ecode.StatusInvalidParams.ToRPCErr()
    // convert error code to standard grpc status code, and rewrite error messages
    return nil, ecode.StatusInvalidParams.ToRPCErr("custom error message")

    // convert error code to standard http status code
    return nil, ecode.StatusInvalidParams.ErrToHTTP()
    // convert error code to standard http status code, and rewrite error messages
    return nil, ecode.StatusInvalidParams.ErrToHTTP("custom error message")

Documentation

Overview

Package errcode is used for http and grpc error codes, include system-level error codes and business-level error codes

Index

Constants

View Source
const ToHTTPCodeLabel = "[standard http code]"

ToHTTPCodeLabel need to convert to standard http code label

Variables

View Source
var (
	Success             = NewError(0, "ok")
	InvalidParams       = NewError(10001, "Invalid Parameter")
	Unauthorized        = NewError(10002, "Unauthorized")
	InternalServerError = NewError(10003, "Internal Server Error")
	NotFound            = NewError(10004, "Not Found")
	Timeout             = NewError(10006, "Request Timeout")
	TooManyRequests     = NewError(10007, "Too Many Requests")
	Forbidden           = NewError(10008, "Forbidden")
	LimitExceed         = NewError(10009, "Limit Exceed")
	DeadlineExceeded    = NewError(10010, "Deadline Exceeded")
	AccessDenied        = NewError(10011, "Access Denied")
	MethodNotAllowed    = NewError(10012, "Method Not Allowed")
	ServiceUnavailable  = NewError(10013, "Service Unavailable")

	Canceled           = NewError(10014, "Canceled")
	Unknown            = NewError(10015, "Unknown")
	PermissionDenied   = NewError(10016, "Permission Denied")
	ResourceExhausted  = NewError(10017, "Resource Exhausted")
	FailedPrecondition = NewError(10018, "Failed Precondition")
	Aborted            = NewError(10019, "Aborted")
	OutOfRange         = NewError(10020, "Out Of Range")
	Unimplemented      = NewError(10021, "Unimplemented")
	DataLoss           = NewError(10022, "Data Loss")

	StatusBadGateway = NewError(10023, "Bad Gateway")

	// Deprecated: use Conflict instead
	AlreadyExists = NewError(10005, "Already Exists")
	Conflict      = NewError(10409, "Conflict")
	TooEarly      = NewError(10425, "Too Early")
)

http system level error code, error code range 10000~20000

View Source
var (
	StatusSuccess = NewRPCStatus(0, "ok")

	StatusCanceled            = NewRPCStatus(30001, "Canceled")
	StatusUnknown             = NewRPCStatus(30002, "Unknown")
	StatusInvalidParams       = NewRPCStatus(30003, "Invalid Parameter")
	StatusDeadlineExceeded    = NewRPCStatus(30004, "Deadline Exceeded")
	StatusNotFound            = NewRPCStatus(30005, "Not Found")
	StatusAlreadyExists       = NewRPCStatus(30006, "Already Exists")
	StatusPermissionDenied    = NewRPCStatus(30007, "Permission Denied")
	StatusResourceExhausted   = NewRPCStatus(30008, "Resource Exhausted")
	StatusFailedPrecondition  = NewRPCStatus(30009, "Failed Precondition")
	StatusAborted             = NewRPCStatus(30010, "Aborted")
	StatusOutOfRange          = NewRPCStatus(30011, "Out Of Range")
	StatusUnimplemented       = NewRPCStatus(30012, "Unimplemented")
	StatusInternalServerError = NewRPCStatus(30013, "Internal Server Error")
	StatusServiceUnavailable  = NewRPCStatus(30014, "Service Unavailable")
	StatusDataLoss            = NewRPCStatus(30015, "Data Loss")
	StatusUnauthorized        = NewRPCStatus(30016, "Unauthorized")

	StatusTimeout          = NewRPCStatus(30017, "Request Timeout")
	StatusTooManyRequests  = NewRPCStatus(30018, "Too Many Requests")
	StatusForbidden        = NewRPCStatus(30019, "Forbidden")
	StatusLimitExceed      = NewRPCStatus(30020, "Limit Exceed")
	StatusMethodNotAllowed = NewRPCStatus(30021, "Method Not Allowed")
	StatusAccessDenied     = NewRPCStatus(30022, "Access Denied")
	StatusConflict         = NewRPCStatus(30023, "Conflict")
)

rpc system level error code with status prefix, error code range 30000~40000

View Source
var SkipResponse = errors.New("skip response") //nolint

SkipResponse skip response

Functions

func GetErrorCode added in v1.9.1

func GetErrorCode(err error) int

GetErrorCode get Error code from error returned by http invoke

func GetStatusCode added in v1.9.1

func GetStatusCode(err error) codes.Code

GetStatusCode get status code from error returned by RPC invoke

func HCode

func HCode(num int) int

HCode Generate an error code between 20000 and 30000 according to the number

http service level error code, Err prefix, example.

var ( ErrUserCreate = NewError(HCode(1)+1, "failed to create user") // 20101 ErrUserDelete = NewError(HCode(1)+2, "failed to delete user") // 20102 ErrUserUpdate = NewError(HCode(1)+3, "failed to update user") // 20103 ErrUserGet = NewError(HCode(1)+4, "failed to get user details") // 20104 )

func ListGRPCErrCodes added in v1.5.2

func ListGRPCErrCodes(w http.ResponseWriter, _ *http.Request)

ListGRPCErrCodes list grpc error codes, http handle func

func RCode added in v1.2.0

func RCode(num int) codes.Code

RCode Generate an error code between 40000 and 50000 according to the number

rpc service level error code, status prefix, example.

var (
	StatusUserCreate = NewRPCStatus(RCode(1)+1, "failed to create user")		// 40101
	StatusUserDelete = NewRPCStatus(RCode(1)+2, "failed to delete user")		// 40102
	StatusUserUpdate = NewRPCStatus(RCode(1)+3, "failed to update user")		// 40103
	StatusUserGet    = NewRPCStatus(RCode(1)+4, "failed to get user details")	// 40104
)

func ShowConfig added in v1.5.2

func ShowConfig(jsonData []byte) func(w http.ResponseWriter, r *http.Request)

ShowConfig show config info @Summary show config info @Description show config info @Tags system @Accept json @Produce json @Router /config [get]

Types

type Detail

type Detail struct {
	// contains filtered or unexported fields
}

Detail error details

func Any

func Any(key string, val interface{}) Detail

Any type key value

func (*Detail) String

func (d *Detail) String() string

String detail key-value

type ErrInfo added in v1.5.2

type ErrInfo struct {
	Code int    `json:"code"`
	Msg  string `json:"msg"`
}

ErrInfo error info

func ListHTTPErrCodes added in v1.5.2

func ListHTTPErrCodes() []ErrInfo

ListHTTPErrCodes list http error codes

type Error

type Error struct {
	// contains filtered or unexported fields
}

Error error

func NewError

func NewError(code int, msg string, details ...string) *Error

NewError create a new error message

func ParseError added in v1.2.0

func ParseError(err error) *Error

ParseError parsing out error codes from error messages

func ToHTTPErr added in v1.2.0

func ToHTTPErr(st *status.Status) *Error

ToHTTPErr converted to http error

func (*Error) Code

func (e *Error) Code() int

Code get error code

func (*Error) Details

func (e *Error) Details() []string

Details get error code details

func (*Error) Err added in v1.2.0

func (e *Error) Err(msg ...string) error

Err convert to standard error, if there is a parameter 'msg', it will replace the original message.

func (*Error) ErrToHTTP added in v1.8.5

func (e *Error) ErrToHTTP(msg ...string) error

ErrToHTTP convert to standard error add ToHTTPCodeLabel to error message, use it if you need to convert to standard HTTP status code, if there is a parameter 'msg', it will replace the original message. Tips: you can call the GetErrorCode function to get the standard HTTP status code.

func (*Error) Msg

func (e *Error) Msg() string

Msg get error code message

func (*Error) NeedHTTPCode added in v1.8.5

func (e *Error) NeedHTTPCode() bool

NeedHTTPCode need to convert to standard http code

func (*Error) RewriteMsg added in v1.9.3

func (e *Error) RewriteMsg(msg string) *Error

RewriteMsg rewrite error message

func (*Error) ToHTTPCode

func (e *Error) ToHTTPCode() int

ToHTTPCode convert to http error code

func (*Error) WithDetails

func (e *Error) WithDetails(details ...string) *Error

WithDetails add error details

func (*Error) WithOutMsg added in v1.5.3

func (e *Error) WithOutMsg(msg string) *Error

WithOutMsg out error message Deprecated: use RewriteMsg instead

func (*Error) WithOutMsgI18n added in v1.9.0

func (e *Error) WithOutMsgI18n(langMsg map[int]map[string]string, lang string) *Error

WithOutMsgI18n out error message i18n langMsg example:

map[int]map[string]string{
		20010: {
			"en-US": "login failed",
			"zh-CN": "登录失败",
		},
	}

lang BCP 47 code https://learn.microsoft.com/en-us/openspecs/office_standards/ms-oe376/6c085406-a698-4e12-9d4d-c3b0ee3dbc4a

type RPCStatus added in v1.2.0

type RPCStatus struct {
	// contains filtered or unexported fields
}

RPCStatus rpc status

func NewRPCStatus added in v1.2.0

func NewRPCStatus(code codes.Code, msg string) *RPCStatus

NewRPCStatus create a new rpc status

func (*RPCStatus) Code added in v1.4.2

func (s *RPCStatus) Code() codes.Code

Code get code

func (*RPCStatus) Err added in v1.2.0

func (s *RPCStatus) Err(desc ...string) error

Err return error if there is a parameter 'desc', it will replace the original message

func (*RPCStatus) ErrToHTTP added in v1.8.5

func (s *RPCStatus) ErrToHTTP(desc ...string) error

ErrToHTTP convert to standard error add ToHTTPCodeLabel to error message, usually used when HTTP calls the GRPC API, if there is a parameter 'desc', it will replace the original message.

func (*RPCStatus) Msg added in v1.4.2

func (s *RPCStatus) Msg() string

Msg get message

func (*RPCStatus) ToRPCCode added in v1.2.0

func (s *RPCStatus) ToRPCCode() codes.Code

ToRPCCode converted to standard RPC error code

func (*RPCStatus) ToRPCErr added in v1.2.0

func (s *RPCStatus) ToRPCErr(desc ...string) error

ToRPCErr converted to standard RPC error, use it if you need to convert to standard RPC errors, if there is a parameter 'desc', it will replace the original message.

type Responser added in v1.2.0

type Responser interface {
	Success(ctx *gin.Context, data interface{})
	ParamError(ctx *gin.Context, err error)
	Error(ctx *gin.Context, err error) bool
}

Responser response interface

func NewResponser added in v1.4.2

func NewResponser(isFromRPC bool, httpErrors []*Error, rpcStatus []*RPCStatus) Responser

NewResponser creates a new responser, if isFromRPC=true, it means return from rpc, otherwise default return from http

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL