Giter VIP home page Giter VIP logo

openapi-codegen-php's Introduction

Elastic OpenAPI PHP client generator.

CircleCI build

Make easier clients creation by generating most of the code from an Open API specification.

Projects using the Elastic OpenAPI PHP client generator:

Contents


Getting started with the generator ๐Ÿฃ

Requirements

We assume you have the following components installed and available in your environment :

  • Docker (used to run the code generator)
  • composer

Initiliaze project

When you want to create a new client you have first to create a new composer project :

composer create-project my-new-fancy-client

Once the project is created you should pimp up your composer.json file (package name, author, ...). Make sure the autoload section contains the PHP namespace you want to use for your client (here Fancy\Client):

"autoload": {
  "psr-4": {
    "Fancy\\Client\\": ""
  }
}

Once the project is created , you have to append the code generator as a requirement of the project:

composer require elastic/openapi-codegen

Configuring the generator

By convention, the code generator expect the resources/api folder containing two files :

{
    "gitUserId": "myorg",
    "gitRepoId": "my-new-fancy-client",
    "artifactVersion": "1.0.0",
    "invokerPackage": "Fancy\\Client",
    "helpUrl": "https://discuss.elastic.co/c/site-search",
    "copyright": "ยฉ [Elastic](https://github.com/elastic)"
}

Running the generator

Once the project is setup and the generator is configured, you can run code generation by using the launcher script from the root of your project :

vendor/bin/elastic-openapi-codegen.sh

The generator will create or update the following files in your project :

  • Client.php: The client class that contains one method for each paths / operation of your specification.

  • Endpoint/*.php: One endpoint class for each path / operation of your specification.

  • README.md: The Readme of your project (see here for how to customize the documentation)

Create the client builder

Client instantiation logic is very specific for each project and need to be customized for each project (authentication management, error handling). At the same time end users of your client expect a very easy to use method to instantiate the client.

Here is a code for providing a very basic client builder to end users:

namespace Fancy\Client;

class ClientBuilder extends \Elastic\OpenApi\Codegen\AbstractClientBuilder
{
    /**
     * Return the configured client.
     *
     * @return \Fancy\Client\Client
     */
    public function build()
    {
        return new Client($this->getEndpointBuilder(), $this->connection());
    }

    /**
     * Endpoint builder is in charge of resolving the endpoint classes.
     * Need to be configured with your own namespace.
     */
    protected function getEndpointBuilder()
    {
        return new \Elastic\OpenApi\Codegen\Endpoint\Builder(__NAMESPACE__ . '\Endpoint');
    }
}

Using the client

Once you will have fulfilled the tasks above, it is very simple for end user to get client they can use :

$clientBuilder = new \Fancy\Client\ClientBuilder();
$client = $clientBuilder->build();

Customization

Now you have a working client, there is several things that you may want to customize :

  • Client and Endpoint code generation
  • Documentation generation
  • Connection logic : request and response handling, authentication, ...

You can find a full documentation of available extension point in the Customization documentation.

FAQ ๐Ÿ”ฎ

Where do I report issues with the client?

If something is not working as expected, please open an issue.

Contribute ๐Ÿš€

We welcome contributors to the project. Before you begin, a couple notes...

License ๐Ÿ“—

Apache 2.0 ยฉ Elastic

Thank you to all the contributors!

openapi-codegen-php's People

Contributors

arnedesmedt avatar afoucret avatar jasonstoltz avatar siebeve avatar coudenysj avatar xvilo avatar metalarend avatar volendavidov avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.