Mik*_*679 7 android retrofit graphql
我是GraphQL的新手,但我现在已经使用Retrofit一段时间了,它易于使用且速度快.就传递数据的方式而言,GraphQL与rest apis有很大不同.关于在Android上使用GraphQL,确实没有太多的教程,我只能找到这个视频(https://www.youtube.com/watch?v=P0uJHI7GjIc&t=1s),但那里没有真正的代码.
在我当前的改装调用代码中,我有一个端点,我设置如下:
final RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(endPoint)
.build();
T service = restAdapter.create(clazz);
Run Code Online (Sandbox Code Playgroud)
然后我打电话给这样的休息服务:
@GET("/users/{login}")
Observable<Github> getUser(@Path("login") String login);
Run Code Online (Sandbox Code Playgroud)
现在使用GraphQL,您只有一个基本URL,没有服务路径.此外,如果您查询userId = 1,则必须发送为带有Body参数的Post:
operationName: arbitrary name ,
query: "{users(userid:$userId){username}},
variables: "{"userId":1}"
Run Code Online (Sandbox Code Playgroud)
我只是不确定这是如何转化为Retrofit的
在您的清单中添加
<uses-permission android:name="android.permission.INTERNET"/>
Run Code Online (Sandbox Code Playgroud)
你的依赖
// Kotlin Coroutines
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.4'
//OkHttp
implementation ("com.squareup.okhttp3:okhttp:3.12.12"){
force = true //API 19 support
}
implementation 'com.squareup.okhttp3:logging-interceptor:3.12.12'
//retrofit
implementation "com.squareup.retrofit2:retrofit:2.7.1"
implementation "com.squareup.retrofit2:converter-scalars:$2.7.1"
Run Code Online (Sandbox Code Playgroud)
还有 Java 8 兼容性
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
}
Run Code Online (Sandbox Code Playgroud)
随着服务
import retrofit2.Response
import retrofit2.http.Body
import retrofit2.http.Headers
import retrofit2.http.POST
interface GraphQLService {
@Headers("Content-Type: application/json")
@POST("/")
suspend fun postDynamicQuery(@Body body: String): Response<String>
}
Run Code Online (Sandbox Code Playgroud)
你可以创建一个对象
import retrofit2.Retrofit
import retrofit2.converter.scalars.ScalarsConverterFactory
object GraphQLInstance {
private const val BASE_URL: String = "http://192.155.1.55:2000/"
val graphQLService: GraphQLService by lazy {
Retrofit
.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(ScalarsConverterFactory.create())
.build().create(GraphQLService::class.java)
}
}
Run Code Online (Sandbox Code Playgroud)
在活动中您可以创建此方法
private fun post(userId: String){
val retrofit = GraphQLInstance.graphQLService
val paramObject = JSONObject()
paramObject.put("query", "query {users(userid:$userId){username}}")
GlobalScope.launch {
try {
val response = retrofit.postDynamicQuery(paramObject.toString())
Log.e("response", response.body().toString())
}catch (e: java.lang.Exception){
e.printStackTrace()
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意:如果你需要突变应该改变这一行
paramObject.put("query", "query {users(userid:$userId){username}}")
Run Code Online (Sandbox Code Playgroud)
到
paramObject.put("query", "mutation {users(userid:$userId){username}}")
Run Code Online (Sandbox Code Playgroud)
构建GraphQL的查询和解析响应并不简单.如果你在宠物项目中使用它,我建议开始探索阿波罗.这个客户正在认真开发,但你已经可以看看并玩它了.
https://github.com/apollographql/apollo-android
到目前为止,我很高兴与Apollo合作,他们的路线图有很好的功能:RxJava集成,改造,订阅和对AutoValue的支持
归档时间: |
|
查看次数: |
6614 次 |
最近记录: |