Hi Suresh,

Thanks for the advice, sure I will do it as you suggested.

Lahiru

On Thu, Feb 16, 2023 at 7:42 PM Suresh Marru <sma...@apache.org> wrote:

> Hi Lahiru,
>
> The two dependencies, a Django-grpc fork (
> https://github.com/socotecio/django-socio-grpc/) and
> https://github.com/grpc/grpc-web are reasonably ok. So building on them
> may not be a bad idea. But if you are hitting too frequent roadblocks, it
> may be wise to switch to Django-rest-framework and take your approach 1.
> Sometimes the downsides of depending on not-so-actively maintained
> dependencies outweigh the technical advantages.
>
> So + 1 to proceed with grpc, but if you stumble, revert to the REST-based
> approach.
>
> Suresh
>
> On Feb 16, 2023, at 3:24 AM, Lahiru Jayathilake <
> lahirujayathil...@gmail.com> wrote:
>
> Hi Marcus,
>
> Thanks for the suggestions and the heads-up. Sure, I will do more
> investigation on that and get back to you with the details.
>
> Thanks,
> Lahiru
>
> On Wed, Feb 15, 2023 at 8:36 PM Christie, Marcus Aaron <machr...@iu.edu>
> wrote:
>
>> Hi Lahiru,
>>
>> Thanks for putting together this investigation. I'm not 100% sure but it
>> looks like gRPC-JS only works with Node.js since it uses Node.js APIs. I
>> think you'll need gRPC-Web to make gRPC calls from a browser. My
>> understanding is that that requires an Envoy proxy on the server side.
>> (Rereading your email, I think you probably already know this, but just in
>> case I thought I would point this out.)
>>
>> It looks like django-grpc-framework isn't an active project [1], so I
>> agree with your concern about depending on it. One issue with using gRPC in
>> Django, I think, is that the integration that we've done with the Django
>> framework would need to be re-implemented, things like middleware and
>> authentication.  It's probably doable, just something to keep in mind.
>>
>> It would be good if the gRPC server could run on the same HTTP port as
>> the Django server, but I'm not sure how that would work.  From the client,
>> accessing the Django server or the gRPC server should both be over SSL, on
>> the same port. Maybe on the backend they run on different ports but with
>> the proxy it looks like from the client's perspective they run on the same
>> port.
>>
>> The django-grpc-framework project may be good to mine for some ideas. I
>> like that it follows django-rest-framework conventions. We use
>> django-rest-framework in the Airavata Django Portal.
>>
>> Thanks,
>>
>> Marcus
>>
>> [1] https://github.com/fengsp/django-grpc-framework/issues/34
>>
>> > On Feb 14, 2023, at 1:17 PM, Lahiru Jayathilake <
>> lahirujayathil...@gmail.com> wrote:
>> >
>> > Hi Suresh,
>> >
>> > Thank you for the feedback. The other library that can be used to
>> facilitate browser communication with gRPC services is gRPC-JS (
>> https://github.com/grpc/grpc-node/tree/master/packages/grpc-js).
>> However, in terms of browser support, gRPC-Web is specifically designed for
>> use in web browsers, and it supports all major browsers including Chrome,
>> Firefox, Safari, and Edge. In contrast, gRPC-JS is designed to work with
>> both web browsers and Node.js, and it may require additional configuration
>> to work correctly in web browsers and it is a bit cumbersome.
>> >
>> > @machr...@iu.edu I had a chat with Suresh and wanted to clarify a few
>> points with you.
>> >
>> > 1. In the second approach what I have done is spinup up a gRPC server
>> in the background (inside Django App). When I was doing that I came across
>> a framework called django-grpc-framework [1][2]. I did not proceed with
>> that framework because it is coming from a personal repository. What do you
>> think? Is it good to go with this?
>> >
>> > 2. Any suggestions or comments on the approach of using gRPC (gRPC-web)
>> to establish communications with the frontend?
>> >
>> > I'd be really happy to hear your thoughts and suggestions on these.
>> >
>> > [1] - https://github.com/fengsp/django-grpc-framework
>> > [2] - https://pypi.org/project/djangogrpcframework/
>> >
>> > Thanks,
>> > Lahiru
>> >
>> >
>> >
>> > On Tue, Feb 14, 2023 at 7:47 PM Suresh Marru <sma...@apache.org> wrote:
>> > Hi Lahiru,
>> >
>> > Thank you for summarizing both of these, and your POCs of both
>> approaches are helpful. The second option, if feasible, will be preferable.
>> You already mentioned the performance. In addition, you will also get
>> forward/backward compatibility if the underlying protobuff structures are
>> maintained with some discipline.
>> >
>> > The big plus side of your 1st approach is the REST-compatible
>> javascript libraries. Other than grpc-web (
>> https://github.com/grpc/grpc-web) have you seen broader support? I see
>> you are building on grpc-js how is that experience?
>> >
>> > Suresh
>> >
>> >> On Feb 13, 2023, at 2:49 PM, Lahiru Jayathilake <
>> lahirujayathil...@gmail.com> wrote:
>> >>
>> >> Hi All,
>> >>
>> >> I have been engaging with the SMILES project to implement the Gateway
>> and its necessary components. Just to give you a brief introduction, the
>> SMILES project has three types of data that need to be combined for
>> publication: Computational DB, Literature DB, and Experiment DB. There
>> should be a frontend to filter, create, and delete data products, with a
>> Django app as the backend that will communicate with Apache Airavata Data
>> Catalog [1].
>> >>
>> >> Mainly, I have been exploring two approaches.
>> >>
>> >> 1.
>> >> <approach1.png>
>> >>
>> >> The frontend will communicate with the Django app via REST, and the
>> Django app will manage the manipulation of data products through gRPC calls
>> to the Data Catalog API. Django models will be used to represent the
>> Computational, Literature, and Experiment data products, without storing
>> the data. In the end, these data products will reside in the Data Catalog,
>> following its established conventions.
>> >>
>> >> POC - https://github.com/lahirujayathilake/SEAGrid
>> >> This has been implemented to cover the data product creation
>> >>
>> >> 2.
>> >> <with-grpc.png>
>> >>
>> >> In this approach, the distinction will be a gRPC server operating
>> within the Django app. To represent the three data products, protobufs will
>> be defined that extend the DataCatalog proto messages [2]. The frontend
>> will communicate using gRPC calls.
>> >> The gRPC API can be used to manipulate data from other clients,
>> resulting in improved performance.
>> >>
>> >> POC - https://github.com/lahirujayathilake/SEAGrid/tree/with-grpc
>> >> (The frontend is inprogress)
>> >>
>> >> I would like to hear your thoughts and feedback on the designs to
>> improve and to go with the right approach.
>> >>
>> >>
>> >> [1] - https://github.com/apache/airavata-data-catalog
>> >> [2] -
>> https://github.com/apache/airavata-data-catalog/blob/main/data-catalog-api/stubs/src/main/proto/DataCatalogAPI.proto
>> >>
>> >> Cheers!
>> >> Lahiru
>> >
>>
>>
>

Reply via email to