Skip to content
Flecs v4.1
rest.h
Go to the documentation of this file.
1/**
2 * @file addons/rest.h
3 * @brief REST API addon.
4 *
5 * A small REST API that uses the HTTP server and JSON serializer to provide
6 * access to application data for remote applications.
7 *
8 * A description of the API can be found in docs/FlecsRemoteApi.md.
9 */
10
11#ifdef FLECS_REST
12
13/**
14 * @defgroup c_addons_rest Rest
15 * @ingroup c_addons
16 * REST API for querying and mutating entities.
17 *
18 * @{
19 */
20
21/* Used for the HTTP server */
22#ifndef FLECS_HTTP
23#define FLECS_HTTP
24#endif
25
26/* Used for building the JSON replies */
27#ifndef FLECS_JSON
28#define FLECS_JSON
29#endif
30
31/* For the REST system */
32#ifndef FLECS_PIPELINE
33#define FLECS_PIPELINE
34#endif
35
36#ifndef FLECS_REST_H
37#define FLECS_REST_H
38
39#ifdef __cplusplus
40extern "C" {
41#endif
42
43/** Default port for the REST API server. */
44#define ECS_REST_DEFAULT_PORT (27750)
45
46/** Component that instantiates the REST API. */
47FLECS_API extern const ecs_entity_t ecs_id(EcsRest);
48
49/** Private REST data. */
50typedef struct {
51 ecs_world_t *world; /**< The world. */
52 ecs_http_server_t *srv; /**< HTTP server instance. */
53 int32_t rc; /**< Reference count. */
54 ecs_map_t cmd_captures; /**< Map of command captures. */
55 double last_time; /**< Last processing time. */
57
58/** Component that creates a REST API server when instantiated. */
59typedef struct {
60 uint16_t port; /**< Port of server (optional, default = 27750). */
61 char *ipaddr; /**< Interface address (optional, default = 0.0.0.0). */
62 ecs_rest_ctx_t *impl; /**< Private implementation data. */
63} EcsRest;
64
65/** Create HTTP server for REST API.
66 * This allows for the creation of a REST server that can be managed by the
67 * application without using Flecs systems.
68 *
69 * @param world The world.
70 * @param desc The HTTP server descriptor.
71 * @return The HTTP server, or NULL if failed.
72 */
73FLECS_API
75 ecs_world_t *world,
76 const ecs_http_server_desc_t *desc);
77
78/** Clean up REST HTTP server.
79 * The server must have been created with ecs_rest_server_init().
80 *
81 * @param srv The server to destroy.
82 */
83FLECS_API
86
87/** REST module import function.
88 * Usage:
89 * @code
90 * ECS_IMPORT(world, FlecsRest)
91 * @endcode
92 *
93 * @param world The world.
94 */
95FLECS_API
97 ecs_world_t *world);
98
99#ifdef __cplusplus
100}
101#endif
102
103#endif
104
105/** @} */
106
107#endif
FLECS_API const ecs_entity_t ecs_id(EcsDocDescription)
Component ID for EcsDocDescription.
struct ecs_http_server_t ecs_http_server_t
HTTP server.
Definition http.h:48
FLECS_API ecs_http_server_t * ecs_rest_server_init(ecs_world_t *world, const ecs_http_server_desc_t *desc)
Create HTTP server for REST API.
FLECS_API void ecs_rest_server_fini(ecs_http_server_t *srv)
Clean up REST HTTP server.
FLECS_API void FlecsRestImport(ecs_world_t *world)
REST module import function.
ecs_id_t ecs_entity_t
An entity identifier.
Definition flecs.h:395
struct ecs_world_t ecs_world_t
A world is the container for all ECS data and supporting features.
Definition flecs.h:439
Component that creates a REST API server when instantiated.
Definition rest.h:59
uint16_t port
Port of server (optional, default = 27750).
Definition rest.h:60
char * ipaddr
Interface address (optional, default = 0.0.0.0).
Definition rest.h:61
ecs_rest_ctx_t * impl
Private implementation data.
Definition rest.h:62
Used with ecs_http_server_init().
Definition http.h:124
Private REST data.
Definition rest.h:50
int32_t rc
Reference count.
Definition rest.h:53
ecs_http_server_t * srv
HTTP server instance.
Definition rest.h:52
double last_time
Last processing time.
Definition rest.h:55
ecs_world_t * world
The world.
Definition rest.h:51
ecs_map_t cmd_captures
Map of command captures.
Definition rest.h:54