[bisq-network/bisq] POC Bisq gRPC for gRPC and REST clients (#4275)
Stan
notifications at github.com
Wed Jun 3 18:17:57 UTC 2020
I was semantically wrong to characterise this gateway proxy as something that enables Bisq to work with RESTful clients. So... oops. Doing so was a time eater.
What it does is expose one web endpoint mapped to the single gRPC service. This single gRPC service performs all implemented Bisq functions, whether requests come from a browser (HTTP 1.1) or gRPC client (HTTP2).
Instead of using URL element paths for passing method names & parameters, all method names & params are passed in the request body, like a web form. That's not RESTful. I was trying to combine most of the thoughts @cbeams recorded for the #grpc-api channel ( keybase://team/bisq/2020-05-18%20api%20next%20steps ) into one experiment: just have a single pass-through gRPC service that takes method names + parameters, and expose the one gRPC service to RESTful web clients. (This kind of web client is not RESTful.)
Right now (if using go grpc-gateway), I can only think of one way of implementing a single pass-through gRPC service that could serve gRPC and RESTful clients:
1. Use the POC's `CallService#call(String[] params)`, or something similar, to serve all gRPC clients. (Keep the client simple.)
2. For RESTful clients, define a gRPC service for each method, and use those gRPC services as pass throughs to the above gRPC `CallService#call(String[] params)`.
`/method1/param1/val1` maps to gRPC service `Method1Service#call(param1, ..., paramN)`, `Method1` returns `CallService#call(String[] params)`
`/method1/param1/val1/paramN/valN` maps to gRPC service `Method1Service#call(param1, ..., paramN)`, `Method1` returns `CallService#call(String[] params)`
`/method2/param/val` maps to gRPC service `Method2Service#call(param)`, `Method2` returns `CallService#call(String[] params)`
etc...
[Go grpc-gateway](https://github.com/grpc-ecosystem/grpc-gateway) protos can be used to map multiple URLs with the same base path element to a single gRPC method, but each unique method (with a unique base path element) needs to be mapped to a unique gRPC service.
I didn't do that because I wanted to see how exposing one gRPC service to gRPC and web clients might work.
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/bisq-network/bisq/pull/4275#issuecomment-638374030
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.bisq.network/pipermail/bisq-github/attachments/20200603/2bfe9fcb/attachment-0001.html>
More information about the bisq-github
mailing list