[PHP] [Improvement] Make Api return object instead of array
Created by: thomasphansen
Description
Today a given "myOperation" operation will have four methods declared on an API:
- myOperation()
- myOperationWithHttpInfo()
- myOperationAsync()
- myOperationAsyncWithHttpInfo()
The two last ones will return promisses, containing the same answer as the first two. The first one returns either {{returnType}} or void, depending on if there is a returnType. (This is actually wrong, but it is being targeted in PR128, linked to issue #125 (closed))
But my problem is with the myOperatorWithHttpInfo() method: it returns an array with three elements:
- the message itself (response)
- the status code
- and an array with headers.
Considering the best practices for OOP, and comparing with other language generators that compound this project (for example, the C# generator), this method should rather return an Object that describes the API Response. Such an object should contain getters for each of the three elements (getMessage()
, getStatus()
, getHeaders()
).
My improvement suggestion (I'll push a PR as soon as I finish this description) is to add another class to the client, called ApiResponse (just like we already have in the C# client generator). This class will be the return for a class of methods ending with *WithApiResponse(), which will replace the existing *WithHttpInfo() ones and offer a more OOP-like interface for interacting with the API Response.
I can see two challenges with this approach:
- Typing the message (return). This is already a problem for the *WithHttpInfo() methods, and is being solved with the addition of the following phpDoc in moustache:
* @return array of {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}null{{/returnType}}, HTTP status code, HTTP response headers (array of strings)
, which results in something like:
* @return array of MyResponseClass, HTTP status code, HTTP response headers (array of strings)
I suggest using the same approach:
* @return APIResponse with "message" property of type MyResponseClass
, which is not a perfect solution, but can be used until the Generics RFC gets an implementation and becomes approved.
- Backwards compatibility. I have no idea of what is your current approach to breaking changes, though my previous experience with swagger tells me that it is not a big concern. Just in case, my PR will keep the existing *WithHttpInfo() methods, but will change its implementation to use the *WithApiResponse() ones internally.
openapi-generator version
Prepare 3.0.3-SNAPSHOT
OpenAPI declaration file content or url
not applicable.
Command line used for generation
./bin/php-petstore.php, from the project root folder
Steps to reproduce
not applicable
Related issues/PRs
not applicable/not found
Suggest a fix/enhancement
will push a PR on this issue