English | 中文
Kitexcall is a command-line tool for sending JSON general requests using kitex, similar to how curl is used for HTTP.
go install github.com/kitex-contrib/kitexcall@latest
When using the kitexcall tool, you need to specify several required arguments, including the path to the IDL file, the method name, and the data to be sent. Example:
// echo.thrift
namespace go api
struct Request {
1: string message
}
struct Response {
1: string message
}
service Echo {
Response echo(1: Request req)
}
{
"message": "hello"
}
var _ api.Echo = &EchoImpl{}
// EchoImpl implements the last service interface defined in the IDL.
type EchoImpl struct{}
// Echo implements the Echo interface.
func (s *EchoImpl) Echo(ctx context.Context, req *api.Request) (resp *api.Response, err error) {
klog.Info("echo called")
return &api.Response{Message: req.Message}, nil
}
func main() {
svr := echo.NewServer(new(EchoImpl))
if err := svr.Run(); err != nil {
log.Println("server stopped with error:", err)
} else {
log.Println("server stopped")
}
}
kitexcall -idl-path echo.thrift -m echo -d '{"message": "hello"}' -e 127.0.0.1:9999
Output:
[Status]: Success
{
"message": "hello"
}
kitexcall -idl-path echo.thrift -m echo -e 127.0.0.1:9999 -f input.json
Output:
[Status]: Success
{
"message": "hello"
}
-help
or -h
: Outputs the usage instructions.-type
or -t
: Specifies the IDL type: thrift or protobuf. It supports inference based on the IDL file type. The default is thrift..-idl-path
or -p
: Specifies the path to the IDL file.-include-path
: Add a search path for the IDL. Multiple paths can be added and will be searched in the order they are added.-method
or -m
: Required, specifies the method name in the format IDLServiceName/MethodName or just MethodName. When the server side has MultiService mode enabled, IDLServiceName must be specified, and the transport protocol must be TTHeader or TTHeaderFramed.-file
or -f
: Specifies the input file path, which must be in JSON format.-data
or -d
: Specifies the data to be sent, in JSON string format.-endpoint
or -e
: Specifies the server address, multiple can be specified.-transport
: Specifies the transport protocol type. It can be TTHeader, Framed, or TTHeaderFramed. If not specified, the default is Buffered.-biz-error
: Enables the client to receive business errors returned by the server.-meta
: Specifies one-way metadata passed to the server. Multiple can be specified, in the format key=value.-meta-persistent
: Specifies persistent metadata passed to the server. Multiple can be specified, in the format key=value.-meta-backward
: Enables receiving backward metadata (Backward) returned by the server.-q
: Only output JSON response, no other information.-verbose
or -v
: Enables verbose mode for more detailed output information.Use the -type
or -t
flag to specify the IDL type. Supported types are thrift and protobuf, with a default of thrift.
kitexcall -t thrift
Use the -idl-path
or -p
flag to specify the path to the IDL file.
kitexcall -idl-path /path/to/idl/file.thrift
Use the -method
or -m
flag to specify the method name. The format can be IDLServiceName/MethodName or just MethodName. When the server side has MultiService mode enabled, IDLServiceName must be specified, and the transport protocol must be TTHeader or TTHeaderFramed.
kitexcall -m GenericService/ExampleMethod
kitexcall -m ExampleMethod
Use the -data
or -d
flag to specify the data to be sent, which should be a JSON formatted string. Alternatively, use the -file
or -f
flag to specify the path to a JSON file containing the data.
Assuming we want to send the data {"message": "hello"}
, we can specify the data like this:
kitexcall -m ExampleMethod -d '{"message": "hello"}'
Or, we can save the data in a JSON file, such as input.json, and then specify the file path:
kitexcall -m ExampleMethod -f input.json
Use the -endpoint
or -e
flag to specify one or more server addresses.
Assuming we have two server addresses, 127.0.0.1:9919 and 127.0.0.1:9920, we can specify the server addresses like this:
kitexcall -m ExampleMethod -e 127.0.0.1:9919 -e 127.0.0.1:9920
-meta
flag to specify, multiple can be specified, in the format key=value.-meta-persistent
flag to specify. Multiple can be specified, in the format key=value.-meta-backward
option to support receiving backward metadata (Backward) returned by the server.Assuming we want to pass Transient metadata temp=temp-value
and persistent metadata logid=12345
to the server and receive backward metadata, we can specify it like this:
kitexcall -m ExampleMethod -meta temp=temp-value -meta-persistent logid=12345 -meta-backward
If the server returns a business exception, you can enable the client to receive business custom exception error codes, error messages, and additional information through the -biz-error
flag.
Assuming the server returns a business error status code 404 and message not found
, we can enable business error handling like this:
kitexcall -m ExampleMethod -biz-error
Use the -verbose
or -v
flag to enable verbose mode, providing more detailed output information.
Maintained by: Zzhiter