https://github.com/zalando/connexion was the other module we had started looking at in Airflow to get OpenAPI for our API.
I think exposing the OpenAPI spec on an endpoint would be good too. The spec should be "global" (at least tied to an API version) as all the tooling would expect a single endpoint/file to query to build client libs - so `/api/v1/_openapi` for instance, and that would contain info about all the endpoints in the v1 API. I don't understand your point about RBAC - accessing the spec won't perform any actions so there aren't any permission concerns are there? -ash > On 4 Apr 2019, at 13:44, danielvazgas...@gmail.com wrote: > > > On ModelResApi class, auto generated endpoints for CRUD rison args could be > optional but I would not go that way, some thoughts about this: > > - ModelRestApi offers complex options for selecting columns, metadata keys, > filters, pagination, ordering. These options are naturally a nested data > structure, and enabling this kind of structure would force me to invent a > specific key/value custom specification. I would say that Rison is a standard > way of solving this. > - Since Rison dumps and loads to JSON, I'm using JSON schema validation. This > increases the CRUD API resilience to malicious or unintentional faulty args. > - Rison solves out of the box, type arg conversion. > > Note: You can use "normal" key/value args when developing your own API, > extending from BaseApi. > > Yes, good idea, OpenAPI spec is a very desirable feature, I was already > looking at: https://github.com/marshmallow-code/apispec. It seems very > doable, even with dynamic schema generation (I still have to try it). I have > some doubts: > > - Should we expose it on some endpoint, if yes, Should it be exposed resource > based /api/v1/<resource>/_openapi. Globally could raise issues regarding RBAC > permissions. > > > On 2019/04/04 08:59:16, Ash Berlin-Taylor <a...@apache.org> wrote: >> Some quick thoughts: >> >> Rison: Is it optional? Can we (please?) still use query params too? >> Hand-crafting/what the parameters look like in the URL is a total-non issue >> for me. >> >> On that front it would be nice if `kwargs['rison']` was more general - to >> cope with Rison or traditional query args in the same view based so >> something like `kwargs['get']`? >> >> For example I instead of >> http://localhost:8080/api/v1/contact/1?q=(columns:!(name,address))' I would >> prefer http://localhost:8080/api/v1/contact/1?columns=name,address (or >> ?columns=name&columns=address) >> >> And yes, having the API be self "documenting"/specifying with OpenAPI >> please! This standard lets client libs be auto-generated based on the schema. >> >> -ash >> >> >>> On 1 Apr 2019, at 18:49, danielvazgas...@gmail.com wrote: >>> >>> >>> >>> On 2019/04/01 17:14:28, Maxime Beauchemin <maximebeauche...@gmail.com> >>> wrote: >>>> Hey! >>>> >>>> I wanted to point out that there's awesome work taking place in FAB around >>>> a new REST API provided by the framework, and ways to extend it. >>>> >>>> Daniel Gaspar (cced) is working on this currently, and looking for input on >>>> design / implementation. >>>> >>>> Check it out and chime in on the PR >>>> https://github.com/dpgaspar/Flask-AppBuilder/pull/929 >>>> >>>> I wanted to point out that a good place to start is by reading the >>>> `rest_api.rst` file in the PR (github collapses it in the PR interface as >>>> it's large, and want to make sure people don't overlook that file) >>>> https://github.com/dpgaspar/Flask-AppBuilder/pull/929/files#diff-f0aaa98b108e6453b3a8b2526956b8beR1 >>>> >>>> Some key elements: >>>> * better and more flexible auth, using JWTs >>>> * Type awareness >>>> * a much better auto REST CRUD, with the ModelRestApi base class >>>> * a new way to define REST endpoints and a cohesive API, versioned as in >>>> `/api/v1` >>>> * Rison integration >>>> * i18n >>>> >>>> This should probably be the foundation to Airflow's REST API as it grows >>>> and this is a unique moment to influence the design of FAB's REST API. >>>> >>>> Max >>>> >>> Hi, >>> >>> Feel free to leave comments on the PR or this thread. >>> Once more you're input would be highly appreciated. >>> >>> Docs are available on: >>> https://flask-appbuilder.readthedocs.io/en/fab2/rest_api.html >>> (I'll be updating readthedocs for this branch) >>> >>> Some design goals: >>> - Security >>> - Enable the possibility to develop dynamic CRUD react components on top of >>> the ModelRestApi class. >>> - Flexibility >>> - Coherent API >>> >>> Thank you! >>> Daniel Gaspar >>> >> >>