I see : you interfaced or skipped Geoserver flawed 2.0 yaml and produced a working OAS 3.0 version instead.
That's an impressive work !

Well, I have to think.
Knowing that yaml (Swagger 2.0) descriptions of Geoserver config REST services are wrong, it disturbs me to see them remaining online, making people believe that they can trust them either for documentation or generation, and that isn't the case. It's like you offer SOAP web-services with a wrong WSDL file coming along...

I would like to see what happens if Geoserver REST config server attempts to generate itself the json description (or yaml one) that depict itsellf the best, using springdoc-openapi-maven-plugin:generate.


On 10/02/2021 17:50, Gabriel Roldan wrote:
On Wed, 10 Feb 2021 at 12:21, Marc LE BIHAN <mlebiha...@gmail.com <mailto:mlebiha...@gmail.com>> wrote:

    Oh, Ok. Sorry my english isn't so good and I hadn't understood all.

np

    An OpenAPI 3 version of geoserver REST contracts already exist and
    is debugged ?
    It's a very good news for me and there's absolutely no need to
    continue using Swagger V2 yaml, then : you're right.
    But where are these OAS 3 files ? I'd better use them immediately.


https://github.com/camptocamp/geoserver-rest-openapi/tree/master/openapi/1.0.0 <https://github.com/camptocamp/geoserver-rest-openapi/tree/master/openapi/1.0.0>

Note the catalog object model is in catalog.yml, and workspaces.yml uses it. The code generation configured in that project's poms takes care of it. Either use it as it (the client it generates) or use it as a guideline. The integration tests could be of help https://github.com/camptocamp/geoserver-rest-openapi/tree/master/java-client/src/test/java/org/geoserver/restconfig/client <https://github.com/camptocamp/geoserver-rest-openapi/tree/master/java-client/src/test/java/org/geoserver/restconfig/client>

Cheers,


    Regards,

    Marc.

    Le mer. 10 févr. 2021 à 15:30, Gabriel Roldan
    <gabriel.rol...@gmail.com <mailto:gabriel.rol...@gmail.com>> a écrit :



        On Wed, 10 Feb 2021 at 07:57, Marc LE BIHAN
        <mlebiha...@gmail.com <mailto:mlebiha...@gmail.com>> wrote:

            Hello,

            Your tool shows the need to have a way to automate
            installation(s) of Geoserver sometimes. And I have it too.
            curl statements aren't enough for this task, and OpenAPI
            is a convenient way to drive its installation. Using a
            client API to override it like you do and offer additional
            help is useful (I have to create internally mine too !).
            But the beginning is that OpenAPI calls have to work, and
            there's some corrections to do in yaml files provided, for
            that.

            Currently, in [GEOS-9886] issue (that I've renamed to
            focus only on workspaces.yaml content), I've addressed
            three flaws :
            - One in the input content sent to postWorkspaces, that
            doesn't send the JSON the server expects.
            - Another in the output of geoserver/rest/workspaces (=
            list all the workspaces) that should expect an array
            incoming in return of a call, instead of an object.
            - Another in the output of
            geoserver/rest/workspaces/{workspaceName} (= a single
            workspace) that should expect a "workspace:" incoming
            instead of an anonymous object.


        If you want to fix the swagger 2 files go for it. I was just
        pointing out there're those OAS3 ones with the errors you
        mention already fixed if you want to use them instead (i.e.
        given swagger 2 is superseded by OAS3).

            I still have to test deleteWorkspace method, and then the
            workspaces.yaml file will be corrected.

            I came too far with my idea of a V2 rest yaml files
            describing the Geoserver REST services, using annotations
            on server classes to generate these yaml files and ensure
            their accuracy,
            but the problem is established : if on that first
            workspaces.yaml file I've found three bugs, the other
            might have the same amount and, one by one, depending on
            my needs, I will have to check and correct them.

            Regards,

            Marc.

            Le mer. 10 févr. 2021 à 01:58, Gabriel Roldan
            <gabriel.rol...@gmail.com
            <mailto:gabriel.rol...@gmail.com>> a écrit :

                Hey, I just saw this, sorry for being late to the party

                There's a lot going on in this discussion, so I'll try
                to be succinct.

                First and foremost, I am generating a Java client from
                the OpenAPI documents. Not the swagger 2 ones provided
                as documentation, but OAS3 ones created using those as
                reference.

                Here's a project I just made public a couple of days
                ago:
                https://github.com/camptocamp/geoserver-rest-openapi
                <https://github.com/camptocamp/geoserver-rest-openapi>

                At camptocamp we're using it in production for over a
                year in an internal project, but now I moved it as a
                standalone project to be used by the OSS project
                geOrchestra.

                It only implements the minimum I needed for that
                internal project so far. That is, working with
                workspaces, datastores, feature types, layers, and
                styles. And probably not even all of it.

                Also, it focuses on JSON representation only.

                On the bright side, it's a standalone library, uses
                the OpenAPI maven code generator, and runs integration
                tests against a GeoServer docker container managed by
                the maven life cycle.

                CI builds are set up using github workflows:
                https://github.com/camptocamp/geoserver-rest-openapi/actions
                <https://github.com/camptocamp/geoserver-rest-openapi/actions>

                ---
                <rant>
                That said, writing the OAS3 files and the generated
                client wrapper code is hard, often having to debug
                GeoServer itself to figure out what's going on in the
                server to be able of mimicking it on the api
                definition. There are several inconsistencies, not
                only in the outdated/incomplete swagger2 files, but in
                the server itself, most of which I think are due to
                using XStream to generate the JSON representations,
                like a single object instead of an array when an array
                is expected but the result contains a single element,
                excessive wrapping of objects, and several other
                annoyances I didn't care to document properly at the
                time, but believe me, I thought having a working set
                of OAS3 specs would be a nice first step towards
                defining a v2 api with clearly defined api contracts
                and code-generated server stubs. Achieving that would
                of course require significant resources so it most
                probably will die in the wish-list.

                But by all means, feel free to check whether that
                project is of use to you and to contribute to it.
                Given enough community interest, we could even manage
                to land it as part of geoserver's codebase.

                This Andrea's comment is of most interest and I think
                I know how to address it

                > Third, if you want to have reliable yamls that you
                can generate clients for, make a plan for it, write a
                GSIP
                
<https://docs.geoserver.org/stable/en/developer/policies/gsip.html>,
                > resource it fully, and then implement it. Do it in a
                way that the system is self sustaining (*every deviation *
                *> gets a test failure*) and you might not need to be
                involved long term all that much (but plan for some).

                Since the OAS3 api object model (catalog info objects,
                etc) mirrors GeoServer Catalog object model, I've
                experience using mapstruct to create code-generated
                object model mappers, and to make the code generation
                fail if something changes, which is a good way to
                ensure both stay in sync. That'd be of special
                interest in case a v2 api would be defined, but I had
                the intention of creating those mappers nonetheless at
                least for the sake of keeping the models in sync.

                As a final note, if I had the resources, I'd very much
                would like to implement such new api version, but
                would definitely do so as a microservice in the
                context of this project
                https://github.com/camptocamp/geoserver-microservices
                <https://github.com/camptocamp/geoserver-microservices>
                </rant>

                Hope that helps,

                Gabriel

                On Mon, 8 Feb 2021 at 04:49, Andrea Aime
                <andrea.a...@geo-solutions.it
                <mailto:andrea.a...@geo-solutions.it>> wrote:

                    On Sun, Feb 7, 2021 at 10:00 PM Marc Le Bihan
                    <mlebiha...@gmail.com
                    <mailto:mlebiha...@gmail.com>> wrote:

                        For that, I think the best thing to do would
                        be to annotate server classes and object to
                        allow Swagger/Open Api to produce their exact
                        declarations of services in a new yaml file.
                        But this new yaml file and Swagger-UI
                        documentation should be in another URL, let
                        say /geoserver/rest/v2/... to ensure that
                        existing code that rely on version 1 of the
                        API can continue to use /geoserver/rest/...
                        without trouble .
                        (but this is only the beginning of a solution...)


                    I don't see the need of a v2, you're not changing
                    the existing REST API implementation and the
                    resource representations no? Just its description.
                    Nobody is using the yamls to generate clients
                    right now, anyways.

                    Also, in general, versioning will likely not work,
                    the API changes little by little as new needs pop
                    up, we'd be at "v200" (exaggerating of course) if
                    we considered every
                    model change happened so far, and every new
                    resource addition or new request parameter.

                    What we typically try to do, is to preserve
                    backwards compatibility, that is, a client written
                    for a previous release should keep on working with the
                    new one (new fields are optional), new parameters
                    in resource requests are optional.

                    As said in my previous mail, the yamls are just
                    documentation at the moment: I don't know why you
                    explain that a client can be generated
                    from YAML files if they are correctly set up (we
                    know that very well), as I told you already, right
                    now it's not a goal, due to the limited staffing
                    of the project.
                    The yaml files have been hand written once, and
                    then mostly left there to rot.

                    If you want to join in the effort to make the yaml
                    files maintainable, and provide resources for both
                    its initial setup and long term maintenance, then
                    we can make
                    "yaml as code generation support" a project goal
                    too. Otherwise there is nothing to discuss, it's
                    not a matter of "right or wrong",
                    it's a matter of having the man hours to do an
                    initial version of it, and then look after it in
                    the long term.
                    Existing developers are busy up to their eyeballs
                    and more, there is no amount of reasoning that
                    will change that.

                        My question is :
                        Do you want this file to be integrated in the
                        restconfig project with a test if I can create
                        one that is convincing,
                        or do you think it's too much, too early, and
                        I better keep these corrected file for myself,
                        for my own use only ?


                    First step, treat it as documentation and simply
                    issue a fix for the yaml.

                    Second step, if you can write a test that
                    generates a client, and can use it in an
                    interaction with a GeoServer,
                    in a fully automated way, that is also welcomed
                    (you might need to setup a GitHub action build
                    too, if the
                    test needs a live GeoServer to work against,
                    otherwise no one will run those tests).

                    Third, if you want to have reliable yamls that you
                    can generate clients for, make a plan for it,
                    write a GSIP
                    
<https://docs.geoserver.org/stable/en/developer/policies/gsip.html>,
                    resource it fully, and then implement it. Do it in
                    a way that the system is self sustaining (every
                    deviation
                    gets a test failure) and you might not need to be
                    involved long term all that much (but plan for some).

                    Regards, Andrea Aime

                    == GeoServer Professional Services from the
                    experts! Visit http://goo.gl/it488V
                    <http://goo.gl/it488V> for more information. ==
                    Ing. Andrea Aime @geowolf Technical Lead
                    GeoSolutions S.A.S. Via di Montramito 3/A 55054
                    Massarosa (LU) phone: +39 0584 962313 fax: +39
                    0584 1660272 mob: +39 339 8844549
                    http://www.geo-solutions.it
                    <http://www.geo-solutions.it>
                    http://twitter.com/geosolutions_it
                    <http://twitter.com/geosolutions_it>
                    -------------------------------------------------------
                    /Con riferimento alla normativa sul trattamento
                    dei dati personali (Reg. UE 2016/679 - Regolamento
                    generale sulla protezione dei dati “GDPR”), si
                    precisa che ogni circostanza inerente alla
                    presente email (il suo contenuto, gli eventuali
                    allegati, etc.) è un dato la cui conoscenza è
                    riservata al/i solo/i destinatario/i indicati
                    dallo scrivente. Se il messaggio Le è giunto per
                    errore, è tenuta/o a cancellarlo, ogni altra
                    operazione è illecita. Le sarei comunque grato se
                    potesse darmene notizia. This email is intended
                    only for the person or entity to which it is
                    addressed and may contain information that is
                    privileged, confidential or otherwise protected
                    from disclosure. We remind that - as provided by
                    European Regulation 2016/679 “GDPR” - copying,
                    dissemination or use of this e-mail or the
                    information herein by anyone other than the
                    intended recipient is prohibited. If you have
                    received this email by mistake, please notify us
                    immediately by telephone or e-mail./

                    _______________________________________________
                    Geoserver-devel mailing list
                    Geoserver-devel@lists.sourceforge.net
                    <mailto:Geoserver-devel@lists.sourceforge.net>
                    https://lists.sourceforge.net/lists/listinfo/geoserver-devel
                    
<https://lists.sourceforge.net/lists/listinfo/geoserver-devel>



-- Gabriel Roldán



-- Gabriel Roldán



--
Gabriel Roldán

_______________________________________________
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel

Reply via email to