网络服务接口
网络服务 API 使用流从 JSON 请求中读取和写入数据。用于管理流的常量、原型、结构和枚举在以下部分中定义。
流定义
mcorest_api_json_read()
和 mcorest_api_json_write()
函数所使用的流原型和结构在文件include/mcorestapi.h 中定义如下:
typedef int (* mcorest_api_stream_read_fn)(
void *ctx,
char *buf,
int len
);
typedef int (* mcorest_api_stream_write_fn)(
void *ctx,
const char *buf,
int len
);
typedef struct mcorest_api_stream_t_
{
void *ctx; /* 将传递给read_fn和write_fn的用户定义上下文。*/
mcorest_api_stream_read_fn read_fn; /* 流读取函数 */
mcorest_api_stream_write_fn write_fn; /* 流写入函数 */
} mcorest_api_stream_t;
JSON 读取
mcorest_api_json_read_*()
函数所使用的 JSON 上下文结构在文件 include/mcorestapi.h 中定义如下:
#define MCOREST_API_JSON_READER_BUFFER_SIZE 256
typedef struct mcorest_api_json_read_ctx_t_
{
mcorest_api_stream_t *stream; /* Stream to read JSON data from. */
/* The following fields are for the JSON reader's internal use. */
int stream_err; /* Stream error flag. */
int stream_end; /* Stream end flag. */
char buf[MCOREST_API_JSON_READER_BUFFER_SIZE]; /* Stream input buffer. */
int buf_len; /* Number of bytes available in the input buffer. */
const char *buf_p; /* Current buffer position pointer. */
int obj_level; /* Object nesting level. */
int arr_level; /* Array nesting level. */
int read_escaped; /* Escaped character read flag. */
} mcorest_api_json_read_ctx_t;
JSON 令牌类型
在文件 include/mcorestapi.h 中定义了由函数 mcorest_api_json_read_next_token()
返回的可能令牌类型的枚举,如下所示:
typedef enum MCOREST_API_JSON_TKN_TYPE_E_
{
MCOREST_API_JSON_TKN_UNKNOWN = 0, /* Unknown token. */
MCOREST_API_JSON_TKN_OBJECT_BGN, /* Object start ('{'). */
MCOREST_API_JSON_TKN_OBJECT_END, /* Object end ('}'). */
MCOREST_API_JSON_TKN_ARRAY_BGN, /* Array start ('['). */
MCOREST_API_JSON_TKN_ARRAY_END, /* Array end (']'). */
MCOREST_API_JSON_TKN_STRING, /* Quoted string. */
MCOREST_API_JSON_TKN_NUMBER, /* Number (integer or real). */
MCOREST_API_JSON_TKN_TRUE, /* "true" literal. */
MCOREST_API_JSON_TKN_FALSE, /* "false" literal. */
MCOREST_API_JSON_TKN_NULL /* "null" literal. */
} MCOREST_API_JSON_TKN_TYPE;
JSON 写入
mcorest_api_json_write_*()
函数所使用的 JSON 上下文结构在文件 include/mcorestapi.h 中定义如下:
typedef struct mcorest_api_json_write_ctx_t_
{
mcorest_api_stream_t *stream; /* Stream to write JSON data into. */
int indent; /* Indentation level for pretty-printing. */
/* The following fields are for the JSON encoder's internal use. */
int first_entry; /* Non-zero if the next key is the first in the object/array. */
int key_allowed; /* Non-zero if a key is allowed to be written. */
int key_was_put; /* Non-zero if a key has just been written. */
int obj_level; /* Object nesting level. */
int arr_level; /* Array nesting level. */
} mcorest_api_json_write_ctx_t;