The PR adding the API work into FAB - 
https://github.com/dpgaspar/Flask-AppBuilder/pull/929

On 10 April 2019 21:01:31 BST, Bas Harenslak <basharens...@godatadriven.com> 
wrote:
>Which PR is this?
>
>> On 8 Apr 2019, at 13:55, danielvazgaspar@ <gmail.com
>danielvazgas...@gmail.com> wrote:
>> 
>> Just commited to the PR, FAB_API_SWAGGER_UI = True 
>> will attach a BaseView with SwaggerUI so it's easy to visualize
>> 
>> On 2019/04/08 09:03:03, danielvazgas...@gmail.com
><danielvazgas...@gmail.com> wrote: 
>>> 
>>> Ok, so now ModelRestApi generates automatic OpenAPI specs from the
>CRUD endpoint, and made
>>> the spec accessible on /api/<version>/_openapi. This endpoint is
>protected, but will allow browser session cookies also (besides JWT).
>>> 
>>> BaseApi generates spec from YAML method docs. And offers 400-500
>already bundled spec responses for easy referencing ($ref: ) and Rison
>jsonschema integration and self registering on /components/parameters
>>> 
>>> I'm not bundling a swagger-ui also. Maybe this could be useful for
>dev.
>>> 
>>> 
>>> On 2019/04/04 14:28:20, Ash Berlin-Taylor <a...@apache.org> wrote: 
>>>> 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
>>>>>>> 
>>>>>> 
>>>>>> 
>>>> 
>>>> 
>>> 

Reply via email to