* [core] Refactor templating management This refactors template management to get logic out of DefaultGenerator and to provide a cleaner API to template search and read/compile. Deprecates MockDefaultGenerator, which is not a mock and causes in-memory retention of file contents. Maintainers should prefer executing a "dryRun" with new DefaultGenerator(true) or do true mock/spies if evaluating template intermediaries is truly necessary. Tests may read written files with lower overhead than the in-process retention of those bytes. This attempts to maintain some compatibility with existing templating adapter interfaces. Any breaking change here would be unintentional but minimal effort to retarget the new interface. * Tests for dry run file outputs * Update API usage in Meta, test TemplateManager * Wait on lastModified, lookup by filename in SpringCodegenTest * Test DefaultGenerator + ignore file * Move config.processOpenAPI in DefaultGenerator * Fix wrong use of libraries templateDirector (java) The samples scripts for Java incorrectly referenced the libraries directories directly rather than the upper-level Java directory. This was incorrect usage of template directories, because the generator expects to be given the "language" directory and perform a lookup for missing templates in the order: * user defined libraries directory * user defined language root * embedded libraries directory * embedded language root * _common directory This is incorrect in our samples scripts because a user or maintainer has the expectation that any template change to files at the Java/ root should also be honored on generation if the script specifies a custom template directory. * Fix handlebars extension usage, clean up Meta tasks HandlebarseEngineAdapter previously didn't handle files without extensions in the same was as the MustacheEngineAdapter. This now allows for files without extension (or dotfiles) to lookup in the same location. Meta tasks are cleaned up to use template manager only, rather than attempting to create an "empty" generator to use the previous templating specific methods. * Update kotlin-multiplatform gradle wrapper * Rename GraphQL .gitignore template The .gitignore file is unable to load via classpath resource from the graphql node server resource directory (for unknown reasons). Before this change, the missing template would fail silently. A .gitignore file may exist in other directories and load as expected. Added a default .gitignore to _common as a fallback so as not to break any custom generators which may also be failing silently. * Log entire stacktrace in go sdk built by gradle in AppVeyor * Rename PHP .gitignore to gitignore Java resources may not load .gitignore, this follows suit with other generators and uses "gitignore" (some use "gitignore.mustache"). * [php] Rename .gitignore templates to gitignore * Use same classpath lookup in common locator * [rust] Properly escape empty triple-braces * [samples] Regenerate
php-base - PHP Slim 4 Server library for OpenAPI Petstore
This server has been generated with Slim PSR-7 implementation.
Requirements
- Web server with URL rewriting
- PHP 7.1 or newer
This package contains .htaccess
for Apache configuration.
If you use another server(Nginx, HHVM, IIS, lighttpd) check out Web Servers doc.
Installation via Composer
Navigate into your project's root directory and execute the bash command shown below.
This command downloads the Slim Framework and its third-party dependencies into your project's vendor/
directory.
$ composer install
Start devserver
Run the following command in terminal to start localhost web server, assuming ./php-slim-server/
is public-accessible directory with index.php
file:
$ php -S localhost:8888 -t php-slim-server
Warning
This web server was designed to aid application development. It may also be useful for testing purposes or for application demonstrations that are run in controlled environments. It is not intended to be a full-featured web server. It should not be used on a public network.
Tests
PHPUnit
This package uses PHPUnit 6 or 7(depends from your PHP version) for unit testing. Test folder contains templates which you can fill with real test assertions. How to write tests read at PHPUnit Manual - Chapter 2. Writing Tests for PHPUnit.
Run
Command | Target |
---|---|
$ composer test |
All tests |
$ composer test-apis |
Apis tests |
$ composer test-models |
Models tests |
$ composer test-mock |
Mock feature tests |
$ composer test-utils |
Utils tests |
Config
Package contains fully functional config ./phpunit.xml.dist
file. Create ./phpunit.xml
in root folder to override it.
Quote from 3. The Command-Line Test Runner — PHPUnit 7.4 Manual:
If phpunit.xml or phpunit.xml.dist (in that order) exist in the current working directory and --configuration is not used, the configuration will be automatically read from that file.
PHP CodeSniffer
PHP CodeSniffer Documentation. This tool helps to follow coding style and avoid common PHP coding mistakes.
Run
$ composer phpcs
Config
Package contains fully functional config ./phpcs.xml.dist
file. It checks source code against PSR-1 and PSR-2 coding standards.
Create ./phpcs.xml
in root folder to override it. More info at Using a Default Configuration File
PHPLint
PHPLint Documentation. Checks PHP syntax only.
Run
$ composer phplint
Show errors
Switch on option in ./index.php
:
/**
* Add Error Handling Middleware
*
* @param bool $displayErrorDetails -> Should be set to false in production
* @param bool $logErrors -> Parameter is passed to the default ErrorHandler
* @param bool $logErrorDetails -> Display error details in error log
* which can be replaced by a callable of your choice.
* Note: This middleware should be added last. It will not handle any exceptions/errors
* for middleware added after it.
*/
--- $app->addErrorMiddleware(false, true, true);
+++ $app->addErrorMiddleware(true, true, true);
Mock Server Documentation
API Endpoints
All URIs are relative to http://petstore.swagger.io:80/v2
Important! Do not modify abstract API controllers directly! Instead extend them by implementation classes like:
// src/Api/PetApi.php
namespace OpenAPIServer\Api;
use OpenAPIServer\Api\AbstractPetApi;
class PetApi extends AbstractPetApi
{
public function addPet($request, $response, $args)
{
// your implementation of addPet method here
}
}
Place all your implementation classes in ./src
folder accordingly.
For instance, when abstract class located at ./lib/Api/AbstractPetApi.php
you need to create implementation class at ./src/Api/PetApi.php
.
Class | Method | HTTP request | Description |
---|---|---|---|
AbstractAnotherFakeApi | call123TestSpecialTags | PATCH /another-fake/dummy | To test special tags |
AbstractFakeApi | createXmlItem | POST /fake/create_xml_item | creates an XmlItem |
AbstractFakeApi | fakeOuterBooleanSerialize | POST /fake/outer/boolean | |
AbstractFakeApi | fakeOuterCompositeSerialize | POST /fake/outer/composite | |
AbstractFakeApi | fakeOuterNumberSerialize | POST /fake/outer/number | |
AbstractFakeApi | fakeOuterStringSerialize | POST /fake/outer/string | |
AbstractFakeApi | testBodyWithFileSchema | PUT /fake/body-with-file-schema | |
AbstractFakeApi | testBodyWithQueryParams | PUT /fake/body-with-query-params | |
AbstractFakeApi | testClientModel | PATCH /fake | To test "client" model |
AbstractFakeApi | testEndpointParameters | POST /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 |
AbstractFakeApi | testEnumParameters | GET /fake | To test enum parameters |
AbstractFakeApi | testGroupParameters | DELETE /fake | Fake endpoint to test group parameters (optional) |
AbstractFakeApi | testInlineAdditionalProperties | POST /fake/inline-additionalProperties | test inline additionalProperties |
AbstractFakeApi | testJsonFormData | GET /fake/jsonFormData | test json serialization of form data |
AbstractFakeApi | testQueryParameterCollectionFormat | PUT /fake/test-query-paramters | |
AbstractFakeClassnameTags123Api | testClassname | PATCH /fake_classname_test | To test class name in snake case |
AbstractPetApi | addPet | POST /pet | Add a new pet to the store |
AbstractPetApi | findPetsByStatus | GET /pet/findByStatus | Finds Pets by status |
AbstractPetApi | findPetsByTags | GET /pet/findByTags | Finds Pets by tags |
AbstractPetApi | updatePet | PUT /pet | Update an existing pet |
AbstractPetApi | deletePet | DELETE /pet/{petId} | Deletes a pet |
AbstractPetApi | getPetById | GET /pet/{petId} | Find pet by ID |
AbstractPetApi | updatePetWithForm | POST /pet/{petId} | Updates a pet in the store with form data |
AbstractPetApi | uploadFile | POST /pet/{petId}/uploadImage | uploads an image |
AbstractPetApi | uploadFileWithRequiredFile | POST /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) |
AbstractStoreApi | getInventory | GET /store/inventory | Returns pet inventories by status |
AbstractStoreApi | placeOrder | POST /store/order | Place an order for a pet |
AbstractStoreApi | deleteOrder | DELETE /store/order/{order_id} | Delete purchase order by ID |
AbstractStoreApi | getOrderById | GET /store/order/{order_id} | Find purchase order by ID |
AbstractUserApi | createUser | POST /user | Create user |
AbstractUserApi | createUsersWithArrayInput | POST /user/createWithArray | Creates list of users with given input array |
AbstractUserApi | createUsersWithListInput | POST /user/createWithList | Creates list of users with given input array |
AbstractUserApi | loginUser | GET /user/login | Logs user into the system |
AbstractUserApi | logoutUser | GET /user/logout | Logs out current logged in user session |
AbstractUserApi | deleteUser | DELETE /user/{username} | Delete user |
AbstractUserApi | getUserByName | GET /user/{username} | Get user by user name |
AbstractUserApi | updateUser | PUT /user/{username} | Updated user |
Models
- OpenAPIServer\Model\AdditionalPropertiesAnyType
- OpenAPIServer\Model\AdditionalPropertiesArray
- OpenAPIServer\Model\AdditionalPropertiesBoolean
- OpenAPIServer\Model\AdditionalPropertiesClass
- OpenAPIServer\Model\AdditionalPropertiesInteger
- OpenAPIServer\Model\AdditionalPropertiesNumber
- OpenAPIServer\Model\AdditionalPropertiesObject
- OpenAPIServer\Model\AdditionalPropertiesString
- OpenAPIServer\Model\Animal
- OpenAPIServer\Model\ApiResponse
- OpenAPIServer\Model\ArrayOfArrayOfNumberOnly
- OpenAPIServer\Model\ArrayOfNumberOnly
- OpenAPIServer\Model\ArrayTest
- OpenAPIServer\Model\BigCat
- OpenAPIServer\Model\BigCatAllOf
- OpenAPIServer\Model\Capitalization
- OpenAPIServer\Model\Cat
- OpenAPIServer\Model\CatAllOf
- OpenAPIServer\Model\Category
- OpenAPIServer\Model\ClassModel
- OpenAPIServer\Model\Client
- OpenAPIServer\Model\Dog
- OpenAPIServer\Model\DogAllOf
- OpenAPIServer\Model\EnumArrays
- OpenAPIServer\Model\EnumClass
- OpenAPIServer\Model\EnumTest
- OpenAPIServer\Model\File
- OpenAPIServer\Model\FileSchemaTestClass
- OpenAPIServer\Model\FormatTest
- OpenAPIServer\Model\HasOnlyReadOnly
- OpenAPIServer\Model\MapTest
- OpenAPIServer\Model\MixedPropertiesAndAdditionalPropertiesClass
- OpenAPIServer\Model\Model200Response
- OpenAPIServer\Model\ModelList
- OpenAPIServer\Model\ModelReturn
- OpenAPIServer\Model\Name
- OpenAPIServer\Model\NumberOnly
- OpenAPIServer\Model\Order
- OpenAPIServer\Model\OuterComposite
- OpenAPIServer\Model\OuterEnum
- OpenAPIServer\Model\Pet
- OpenAPIServer\Model\ReadOnlyFirst
- OpenAPIServer\Model\SpecialModelName
- OpenAPIServer\Model\Tag
- OpenAPIServer\Model\TypeHolderDefault
- OpenAPIServer\Model\TypeHolderExample
- OpenAPIServer\Model\User
- OpenAPIServer\Model\XmlItem
Authentication
Security schema api_key
Important! To make ApiKey authentication work you need to extend \OpenAPIServer\Auth\AbstractAuthenticator class by \OpenAPIServer\Auth\ApiKeyAuthenticator class.
Security schema api_key_query
Important! To make ApiKey authentication work you need to extend \OpenAPIServer\Auth\AbstractAuthenticator class by \OpenAPIServer\Auth\ApiKeyAuthenticator class.
Security schema http_basic_test
Important! To make Basic authentication work you need to extend \OpenAPIServer\Auth\AbstractAuthenticator class by \OpenAPIServer\Auth\BasicAuthenticator class.
Security schema petstore_auth
Important! To make OAuth authentication work you need to extend \OpenAPIServer\Auth\AbstractAuthenticator class by \OpenAPIServer\Auth\OAuthAuthenticator class.
Scope list:
write:pets
- modify pets in your accountread:pets
- read your pets
Advanced middleware configuration
Ref to used Slim Token Middleware dyorg/slim-token-authentication