تنها چیزی که لازم است بدانیم این است که چه عنصری از سمت سرور دریافت می شود و سپس کلاس داده متناظر با آن را ایجاد میکنیم .
کلاس داده را هم میتوان بصورت دستی و هم بصورت خودکار، با دادن فایل IDL دریافتی( که در اینجا منظور JSON است )به سایتهای تبدیل کننده خیلی سریع برای زبان مورد نظر دریافت کرد و در برنامه از آن استفاده کرد.
با این کار اکنون ما یک زبان مشترک که ارتباط بین سرور PHP و کلاینت Kotlin را برقرار می کند داریم.
بعنوان نمونه، ما یک داده دریافتی از سرور با لینک https://jsonplaceholder.typicode.com/posts و فرمت JSONداریم.
کلاس داده متناظر با این داده که قابل استفاده در زبان مورد نظر ماست به شکل زیر خواهد بود:
data class Post(val userId: Int, val id: Int, val title: String, val body: String )
کتابخانه rpc ما که در اینجا Retrofit است ، یک مبدل (converter-gson) دریافت می کند که بصورت خودکار کلاس داده ما را به فرمت قابل فهم برای سرور تبدیل می کند و داده دریافتی را تبدیل به شیئی از نوع کلاس داده ما میکند و برای استفاده دقیقا مثل کلاس های محلی می شود.
مبدل ها را می توان برای پشتیبانی از انواع دیگر IDL اضافه کرد. 6 ماژول محبوب سریال سازی قابل پشتیبانی عبارتند از:
برای برقراری ازتباط با سرور نیاز به interface داریم که در آن از متدهای HTTP استفاده می شود. تمام متد هایی که میتواند درPHP و هدر استفاده شود پشتیبانی می شود. در اینجا ما با GET لیستی از پست ها دریافت خواهیم کرد:
interface PostService { @GET("posts") fun getPost(): Call<List<Post>> }
اکنون یک کلاس کمکی برای برقراری ارتباط با سرور و ایجاد یک سرویس جهت استفاده آن در کد خودمان ، نیاز داریم که بصورت زیر تعریف می شود:
PostApi.kt
object PostApi { private val retrofit = Retrofit.Builder() .baseUrl("https://jsonplaceholde.typicode.com/") .addConverterFactory(GsonConverterFactory.create()) .build() val service = retrofit.create(PostService::class.java) }
همه چیز تمام شد فقط کافیست درون کدمان جایی که میخواهیم متدهای ریموت را صدا بزنیم ،از طریق سرویس به متد های HTTPدسترسی پیدا کنیم:
PostApi.service.getPost().execute().body().apply { this?.forEach { println(it.userId) println(it.id) println(it.title) println(it.body) } }