forked from loafle/openapi-generator-original
* [C++][Pistache] Refactor setupSupportingFiles Supporting files are set up in the CppPistacheServerCodegen() constructor as well as in processOpts(). Refactor the code and extract a method setupSupportingFiles(). * [C++][Pistache] Refactor: Simplify isQueryParam condition Both branches of the if/else do the same steps. Refactor this out and invert logic. * [C++][Pistache] Refactor: Add injectImplInFilename Both branches of the if/else if do the similar steps and are dependent on the suffix. Make this obvious by introducing a new method injectImplInFilename(String result, String suffix). * [C++][Pistache] Refactor: injectImplInFilename: remove index search We do not need the separatorChar index to inject the "Impl" string. Simply truncate the whole string. Also rename the parameter from 'result' to' filename'. * CppPistacheServer: Refactor postProcessOperationsWithModels Pull out the post-processing for a single operation, and also pull out post-processing for parameters. Introduce boolean expressions for supported parsing per parameter, and consumption of JSON. Reorder code to make locality more explicit i.e. how consumeJSON and isParsingSupported is generated and used. * CppPistacheServer: Refactor to use functional matching Functional matching like anyMatch() directly state what boolean value is searched. However, the Predicates deserve to heave names themselves. * CppPistacheServer: Add base class for Api Looking at the generated main-api-server.cpp code it gets obvious that the API classes are self similar with a similar interface. Only the construction and teh initialization is called in the main() function. Leverage this fact to create a generalization ApiBase. Introduce ApiBase as a pure virtual base class to the concrete API classes and declare init() as virtual. Pull the route member into the base class. With this change we could have a container hold all the ApiImpl objects later and call init() on all of them using a for_each loop. * CppPistacheServer: Use ApiBase for ApiImpl storage Refactor the main-api-server template to use a vector for ApiImpl storage instead of separate objects. This leverages the previously added ApiBase generalization. We push all concrete ApiImpl objects into a vector and call init() on each of them. * [C++][Pistache]: Update generated sample Due to teh addition of ApiBase class update the generated sample. * [C++][Pistache] Add comment for postProcessSingleParam * [C++][Pistache] Rename and comment implFilenameFromApiFilename While writing the comment, I realized that the method name could be more precise. Thus rename injectImplInFilename to implFilenameFromApiFilename and add comment.
REST API Server for OpenAPI Petstore
Overview
This API Server was generated by the OpenAPI Generator project. It uses the Pistache Framework.
Files organization
The Pistache C++ REST server generator creates three folders:
api
: This folder contains the handlers for each method specified in the OpenAPI definition. Every handler extracts the path and body parameters (if any) from the requests and tries to parse and possibly validate them. Once this step is completed, the main API class calls the corresponding abstract method that should be implemented by the developer (a basic implementation is provided under theimpl
folder)impl
: As written above, the implementation folder contains, for each API, the corresponding implementation class, which extends the main API class and implements the abstract methods. Every method receives the path and body parameters as constant reference variables and a reference to the response object, that should be filled with the right response and sent at the end of the method with the command: response.send(returnCode, responseBody, [mimeType])model
: This folder contains the corresponding class for every object schema found in the OpenAPI specification.
The main folder contains also a file with a main that can be used to start the server. Of course, is you should customize this file based on your needs
Installation
First of all, you need to download and install the libraries listed here.
Once the libraries are installed, in order to compile and run the server please follow the steps below:
mkdir build
cd build
cmake ..
make
Once compiled run the server:
cd build
./api-server
Libraries required
- pistache
- JSON for Modern C++: Please download the
json.hpp
file and put it under the model/nlohmann folder
Namespaces
org.openapitools.server.api org.openapitools.server.model