-
-
Notifications
You must be signed in to change notification settings - Fork 6.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[C++][Restbed] Add handler callback methods #2911
Conversation
b3d3c09
to
6829e11
Compare
A generic comment here, Callback is also an OpenApi 3 keyword, won't this be confusing? |
modules/openapi-generator/src/main/resources/cpp-restbed-server/api-header.mustache
Outdated
Show resolved
Hide resolved
Definitely a wrong name then (I didn't know this feature before). Should I change 'callback' to 'handler'? |
I think handler would be a better name |
6829e11
to
eaac016
Compare
eaac016
to
da96086
Compare
Done |
@muttleyxd thanks again for your contribution, which has been included in the v4.0.1 release (https://twitter.com/oas_generator/status/1135534738658062336) |
* 4.1.x: (56 commits) sync master Update compatibility table Ruby client: escape path parameters (OpenAPITools#3039) [gradle plugin] Release 4.0.1 fixes (OpenAPITools#3051) Update version to 4.0.2-SNAPSHOT (OpenAPITools#3047) Map number to double time since float is also parsed as double in Qt5 C++ (OpenAPITools#3046) Prepare 4.0.1 release (OpenAPITools#3041) [gradle] Reworking publishing pipeline (OpenAPITools#2886) [typescript-fetch] Fix uploading files (OpenAPITools#2900) Resolves OpenAPITools#2962 - Add properties config to Maven parameters (OpenAPITools#2963) fix(golang): Check error of xml Encode (OpenAPITools#3027) [C++][Restbed] Add handler callback methods (OpenAPITools#2911) Remove null checks for C# value types (OpenAPITools#2933) [python-server] Support python 3.7 for all server-generators (OpenAPITools#2884) Use golang's provided method names (gin) (OpenAPITools#2983) [python] Adding constructor parameters to Configuration and improving documentation (OpenAPITools#3002) Add new option to maven plugin's readme (OpenAPITools#3025) Engine param in maven plugin. (OpenAPITools#2881) Added support for patterns on model properties (OpenAPITools#2948) [csharp] Make API response headers dictionary case insensitive (OpenAPITools#2998) ...
I appreciate and agree that this is a very important feature, though I don't see how to make use of the set_handler_ GET/POST/DELETE without changing the generated code.
I don't see a way of accessing the Resource objects pubished after the creation of the object, in order to call the respective set_handler_ to set my custom handlers, and this could not have been done before since we cannot call it without an object. Can you please explain, maybe with a small example, how to make use of this in order to set custom handlers |
Yeah, I think I'd probably need to change generated constructor or add another method for setting handlers. class Derived : public PetApi
{
public:
<type> PetApiPetResource_GET(...) override;
}; For now I usually create new PetApi class and and use the resources myself, something like that class MyPetApi
{
public:
MyPetApi() {
std::shared_ptr<PetApiPetResource> spPetApiPetResource = std::make_shared<PetApiPetResource>();
spPetApiPetResource.set_handler_PUT([&](auto const& body) { return handlePetPut(body); })
this->publish(spPetApiPetResource);
}
private:
std::pair<int, std::string> handlePetPut(std::string const& body) {
// Do something here
return {200, "Success"};
}
}; |
PR checklist
./bin/
to update Petstore sample so that CIs can verify the change. (For instance, only need to run./bin/{LANG}-petstore.sh
,./bin/openapi3/{LANG}-petstore.sh
if updating the {LANG} (e.g. php, ruby, python, etc) code generator or {LANG} client's mustache templates). Windows batch files can be found in.\bin\windows\
. If contributing template-only or documentation-only changes which will change sample output, be sure to build the project first.Added second commit with updated samples (not 100% sure what I should do with them), are there any tests for these? I didn't find any.
master
,4.1.x
,5.0.x
. Default:master
.@ravinikam @stkrwork @fvarose @etherealjoy @MartinDelille
Description of the PR
Related issue: #273
What I don't like about current generator: you need to modify generated code, there isn't a way for injecting your own handler. librestbed does not allow to replace already existing handler, which means you either modify generated code or don't use it at all. I modified it a little, to allow setting a callback, which responds with std::pair<int (HTTP status code), std::string (response)>
I'm not an expert on Mustache, so I would be really grateful for some tips where I could optimize/refactor it.