OkHttp
gRPC
Our great sponsors
OkHttp | gRPC | |
---|---|---|
37 | 10 | |
43,733 | 10,441 | |
0.3% | 0.7% | |
9.1 | 9.2 | |
3 days ago | 3 days ago | |
Kotlin | Java | |
Apache License 2.0 | Apache License 2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
OkHttp
-
What stack to use for app with functionality like event calendar?
Retrofit in combination with OkHttp for fetching data from server (which hopefully already exists)
- Generate Kotlin client for a complex web API
-
Modern Android Development in 2023
OkHttp
-
Is it acceptable to use mock servers, like Postman, for testing in Android?
Being more familiar with Android development only, I mainly use https://github.com/square/okhttp/tree/master/mockwebserver
-
Best libraries for Android Developers
Retrofit is the best library that lets you connect to HTTP-based API services from your Android applications. It leverages the OkHttp library’s core functionality, adding a bunch of features to it while eliminating the boilerplate code.
-
How to use Cronet Engine for API calls? Any simple repo for it to understand?
Use Retrofit or anything else that builds on OkHttp. If you do end up needing some features that Cronet supports but OkHttp doesn't (such as HTTP/3), just write an interceptor or use google/cronet-transport-for-okhttp.
-
IPv6 Support on Android
Even as of 2022, there are networks out there that have broken/misconfigured IPv6, and there most likely always will be. Some wireless carriers and ISPs support it, but in some cases, people have old or improperly-configured routers and devices. Patchy IPv6 support is less of a problem on iOS and the web these days since those clients have support for dynamically falling back on IPv4 when IPv6 fails. After more research, we realized that Android didn’t have this “dual-stack” IP support, and neither did our preferred networking library, OkHttp. This explained why the content-loading issues only surfaced on Android, and why it took some additional digging to uncover the root cause.
Working with the reddit infrastructure team, we did more testing and built high confidence that this last IPv6 theory was indeed the cause of users’ content-loading problems. We assessed our usage of OkHttp and checked if there were any upcoming plans to improve support. OkHttp did have an open ask for “Happy Eyeballs” #506, but no known plans to implement it. Out of due diligence, we also assessed other network libraries– but knew that moving off OkHttp would be a radical change, indeed. We read the RFC 8305, “Happy Eyeballs algorithm for dual-stack IPv4/IPv6”, and thought “wow, we don’t want to implement this ourselves.” And as we were studying that open OkHttp issue and thinking “If only they would…”
-
App Flow of an Android App?
Your app would request data from the backend inside it's domain layer. As the other commenter mentioned, Retrofit is a commonly used library for interfacing with REST APIs, which is built on top of OkHttp (a more generic HTTP client).
-
Watery : A water delivery solution android app
OkHttp
gRPC
-
Distroless Alpine
I've trialled my new image with an existing project via JLink that's heavy on Netty and gRPC the image works great (with a small tweak to exclude grpc-netty-shaded due to grpc-java#9083).
-
Buf raises $93M to deprecate REST/JSON
`proto_library` for building the `.bin` file from protos works great. Generating stubs/messages for "all" languages does not. Each language does not want to implement gRPC rules, the gRPC team does not want to implement rules for each language. Sort of a deadlock situation. For example:
- C++: https://github.com/grpc/grpc/blob/master/bazel/cc_grpc_libra...
- Python: https://github.com/grpc/grpc/blob/master/bazel/python_rules....
- ObjC: https://github.com/grpc/grpc/blob/master/bazel/objc_grpc_lib...
- Java: https://github.com/grpc/grpc-java/blob/master/java_grpc_libr...
- Go (different semantics than all of the other): https://github.com/bazelbuild/rules_go/blob/master/proto/def...
But there's also no real cohesion within the community. The biggest effort to date has been in https://github.com/stackb/rules_proto which integrates with gazelle.
tl;dr: Low alignment results in diverging implementations that are complicated to understand for newcomers. Buff's approach is much more appealing as it's a "this is the one way to do the right thing" and having it just work by detecting `proto_library` and doing all of the linting/registry stuff automagically in CI would be fantastic.
-
grpc_bench: open-source, objective gRPC benchmark
Small clarification (to my understanding, I'm not a Java Guru) on why Java got on top - those Java implementations use something called Direct Executor. It's super performant when there's no chance of a blocking operation. But if you are to do anything more than echo service, you might be in trouble. Other implementations probably don't suffer from the same constraint. The related discussion can be found in this PR.
-
GRPC
If you do streaming then the best option would be to use a so called manual flow control. You can find an example here.
-
High performing APIs with gRPC
Another interesting link is their official grpc-java benchmarks project, which is also used in the benchmark I've posted you.
What are some alternatives?
unirest-java - Unirest in Java: Simplified, lightweight HTTP client library.
Async Http Client - Asynchronous Http and WebSocket Client library for Java
Netty - Netty project - an event-driven asynchronous network application framework
Dubbo - Apache Dubbo is a high-performance, java based, open source RPC framework.
Retrofit - A type-safe HTTP client for Android and the JVM
Android Volley
Finagle - A fault tolerant, protocol-agnostic RPC system
Undertow - High performance non-blocking webserver
android-async-http - This project under develop
okio - A modern I/O library for Android, Java, and Kotlin Multiplatform.