On Thu, Jan 13, 2022 at 7:29 PM Aleksandar Vidakovic < chee...@monkeysintown.com> wrote:
> Hi everyone, > > ... my 2 cents: > > 3. https://github.com/openMF/fineract-client was an earlier effort (don't > remember which community member created it); the Swagger descriptor was > there already for a couple of years (got added to Fineract as a GSoC > project), but we (actually Michael) just recently added a separate module > to the Fineract repo to do this in one build; all in all I'd say they > should be pretty much the same... maybe the one in > https://github.com/openMF/fineract/tree/develop/fineract-client could be > a little fresher given that it's automatically updated when the Swagger > file is updated. > I agree with what Aleks states here, and would add the following additional points: https://github.com/openMF/fineract/tree/develop/fineract-client is not the repository of Apache Fineract. That repo on openMF is a fork, which from an Apache point of view is really no different from the 921 other forks listed on https://github.com/apache/fineract/network/members (in my view). What I think this email thread is really asking about is presumably https://github.com/apache/fineract/tree/develop/fineract-client (NOT https://github.com/openMF/fineract/tree/develop/fineract-client; note the /openmf/ vs /apache/ difference) -VS- https://github.com/openMF/fineract-client? I would venture as far as stating that https://github.com/apache/fineract/tree/develop/fineract-client is now "Apache Fineract's official Java client", and for someone who isn't already using https://github.com/openMF/fineract-client and previously invested in it, I suggest that we recommend using that, only. 4. Automatic or not... kind of both: the challenge with the current REST > resource classes in Fineract is that pretty much all of them are not type > safe; there's a lot of manual JSON de-/serialization done; in most cases > the HTTP body lands in a String variable first, and as there's no way for > the Swagger annotation processor to detect what's going on in those String > blobs we had to handcraft some mock classes that are only there to give > context/type info to the Swagger annotation processor. This was done that > way to maintain 100% backward Java source compatibility. It should > cover most of Fineract's API, but there are for sure parts that are a bit > out of sync. Note: there's been a discussion to introduce type safety in > the REST resource classes, using Jackson instead of GSON, get rid of those > mock Java type classes and most (if not all) of the handcrafted JSON > de-/serialization... there'll soon be a first PR to try this out with a > small self-contained module (maybe client API or something similar). > > 5. See my previous point; the Java code generation is fully automatic in > the Fineract repo, but the mock type classes that are used to generate the > Swagger file are handcrafted... if something is missing then it was already > missing in the Swagger file (aka the mock classes). > We very much welcome any PRs from any interested parties using https://github.com/apache/fineract/tree/develop/fineract-client with suggested improvements for it! ;-) For example for the fullname field mismatch you noticed - go ahead and fix it! :) You may also be interested in having a look through the currently 52 open issues mentioning "fineract-client" in the Apache Fineract JIRA, see https://issues.apache.org/jira/issues/?jql=text%20~%20%22fineract-client%22%20AND%20status%20%3D%20open, contributions to any of those are certainly appreciated. (Further analyzing and "triaging" these issues is a form of contribution as well, of course.) 6. I know that the Fineract client (the one from the Fineract repo) was > used in commercial projects; I have no numbers about volume and performance > though. > Re. performance, I feel reasonably confident in stating that given that the Apache Fineract Client is based on Swagger Code Generation and the OkHTTP client library, which are both very widely used, running into any significant client side performance issues at scale are somewhat unlikely. Sure it's not quite Google Protocol Buffers level binary serialization performance, but in the bigger picture of things, the Fineract "backend" (fineract-provider) is very very likely the much more interesting part of performance investigations than the little Java object to JSON conversation happening in fineract-client (in my view). Of course, any party considering production use would do their own due diligence and scale testing. (The Apache Fineract community is also very interested in any Pull Requests contributing both scale testing tools and performance improvements to the project.) I hope this helps? Cheers, > > Aleks > > On Thu, Jan 13, 2022 at 7:03 PM Ed Cable <edca...@mifos.org> wrote: > >> Chinmay and Danish, >> >> There is some interest and inquiry coming from users in the >> community regarding the Fineract Client. >> >> I was hoping you all along with some of the past contributors to this >> project like @Aleksandar Vidakovic <chee...@monkeysintown.com> and @Michael >> Vorburger <michael.vorbur...@gmail.com> could help me with some of the >> below questions: >> >> 3. What is the difference between these 2 clients: >> https://github.com/openMF/fineract/tree/develop/fineract-client >> https://github.com/openMF/fineract-client >> >> Are either of these client’s considered production ready? >> >> 4. Is >> https://github.com/openMF/fineract-client/blob/master/swagger-api-spec-file.json >> hand >> coded or generated? >> >> 5. We have noticed that both fineract-clients only have fullname field >> supported when creating a Fineract Client (the database entity). This has >> led to the conclusion that neither are based off the Fineract-provider >> JAX-RS but are probably hand coded. We are wondering which one is best >> supported now and into the future, or if we should hand code our own client. >> >> 6. Have either client been used in high volume use cases? >> >>