Retrofit และ REST APIs
ส่งคำขอ HTTP ด้วย Retrofit กำหนดอินเทอร์เฟซ API แปลง JSON ด้วย Gson/Moshi จัดการการตอบกลับและข้อผิดพลาด และผสานการทำงานกับโครูทีน
Retrofit และ REST APIs เป็นบทเรียน Android Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 6 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Android Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Android Academy มีบทเรียนทั้งหมด 6 บทเรียน
Retrofit คืออะไร
Retrofit คือไคลเอ็นต์ HTTP ยอดนิยมสำหรับ Android ที่พัฒนาโดย Square ช่วยให้คุณกำหนด REST API เป็นอินเทอร์เฟซ Kotlin ได้ โดยไม่ต้องเขียนโค้ด HTTP ซ้ำซ้อน
- ใส่คำอธิบายประกอบให้เมธอดด้วย
@GET,@POSTและอื่น ๆ - แปลงการตอบกลับ JSON เป็นคลาสข้อมูล Kotlin โดยอัตโนมัติ
- รองรับโคโรทีนโดยตรง (
suspend fun)
การเพิ่มการพึ่งพา
เพิ่ม Retrofit และตัวแปลง Gson ลงใน app/build.gradle:
// app/build.gradle
dependencies {
implementation 'com.squareup.retrofit2:retrofit:2.11.0'
implementation 'com.squareup.retrofit2:converter-gson:2.11.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.12.0'
}
// AndroidManifest.xml — add internet permission:
// <uses-permission android:name="android.permission.INTERNET" />กำหนดอินเทอร์เฟซ API
สร้างอินเทอร์เฟซ Kotlin ที่อธิบายปลายทาง API ของคุณ:
import retrofit2.http.*
data class Post(val id: Int, val title: String, val body: String, val userId: Int)
interface ApiService {
@GET("posts")
suspend fun getPosts(): List<Post>
@GET("posts/{id}")
suspend fun getPost(@Path("id") id: Int): Post
@POST("posts")
suspend fun createPost(@Body post: Post): Post
@GET("posts")
suspend fun getPostsByUser(@Query("userId") userId: Int): List<Post>
}สร้างอินสแตนซ์ Retrofit
สร้างอินสแตนซ์ Retrofit แบบซิงเกิลตัน ซึ่งโดยทั่วไปจะสร้างไว้ใน object หรือใช้ฮิลต์:
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
object RetrofitClient {
private const val BASE_URL = "https://jsonplaceholder.typicode.com/"
val api: ApiService by lazy {
Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(ApiService::class.java)
}
}การส่งคำขอ GET
เรียก API จาก Repository โดยใช้โคโรทีนของ Kotlin:
class PostRepository {
private val api = RetrofitClient.api
suspend fun getPosts(): List<Post> {
return api.getPosts() // Retrofit handles threading for you
}
suspend fun getPost(id: Int): Post {
return api.getPost(id)
}
}
// In ViewModel:
fun loadPosts() {
viewModelScope.launch {
try {
val posts = withContext(Dispatchers.IO) {
repository.getPosts()
}
_posts.value = posts
} catch (e: Exception) {
_error.value = "Network error: ${e.message}"
}
}
}การแมป JSON ด้วย Gson
Gson จะแปลง JSON เป็นคลาสข้อมูล Kotlin โดยอัตโนมัติ ชื่อฟิลด์ต้องตรงกับคีย์ JSON หรือใช้ @SerializedName:
import com.google.gson.annotations.SerializedName
data class User(
val id: Int,
val name: String,
val email: String,
@SerializedName("phone_number") // JSON key is 'phone_number'
val phoneNumber: String,
@SerializedName("created_at")
val createdAt: String
)คำขอ POST พร้อมเนื้อหา
ส่งข้อมูลไปยังเซิร์ฟเวอร์โดยใช้ @POST และ @Body:
// API interface:
@POST("users")
suspend fun createUser(@Body user: User): User
// In Repository:
suspend fun createUser(name: String, email: String): User {
val newUser = User(id = 0, name = name, email = email, phoneNumber = "", createdAt = "")
return api.createUser(newUser)
}
// In ViewModel:
fun registerUser(name: String, email: String) {
viewModelScope.launch {
val user = withContext(Dispatchers.IO) {
repo.createUser(name, email)
}
_registeredUser.value = user
}
}ส่วนหัวและการยืนยันตัวตน
เพิ่มส่วนหัวให้กับทุกคำขอโดยใช้ตัวสกัดกั้นของ OkHttp:
import okhttp3.OkHttpClient
import okhttp3.Interceptor
val authClient = OkHttpClient.Builder()
.addInterceptor { chain ->
val request = chain.request().newBuilder()
.addHeader("Authorization", "Bearer $token")
.addHeader("Accept", "application/json")
.build()
chain.proceed(request)
}
.build()
val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.client(authClient) // use our authenticated client
.addConverterFactory(GsonConverterFactory.create())
.build()การจัดการข้อผิดพลาด HTTP
การตอบกลับ HTTP ที่สำเร็จ (200-299) จะคืนค่า ส่วนการตอบกลับที่มีข้อผิดพลาด (4xx, 5xx) จะส่ง HttpException ออกมา ต้องจัดการทั้งสองกรณีเสมอ:
HttpException— เซิร์ฟเวอร์ส่งรหัสสถานะที่แสดงข้อผิดพลาดกลับมาIOException— ไม่มีการเชื่อมต่อเครือข่าย
ตรวจสอบอย่างรวดเร็ว
คำอธิบายประกอบ Retrofit ใดใช้แมปพารามิเตอร์ของเมธอดกับส่วนเส้นทาง URL เช่น /posts/{id}
ทบทวน: Retrofit และ API
ตอนนี้คุณสามารถดึงข้อมูลจาก REST API ใด ๆ ได้แล้ว:
- กำหนด API ด้วยอินเทอร์เฟซ Kotlin และคำอธิบายประกอบ (@GET, @POST, @Path, @Query)
- สร้างอินสแตนซ์ Retrofit ด้วย URL พื้นฐานและตัวแปลง Gson
- เรียกฟังก์ชัน suspend จากโคโรทีนใน ViewModel
- แมป JSON → คลาสข้อมูล Kotlin โดยอัตโนมัติ
- จัดการ
HttpExceptionและIOException
ถัดไป: แสดงรูปภาพจากเครือข่ายด้วย Coil
คำถามที่พบบ่อย
บทเรียน “Retrofit และ REST APIs” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “Retrofit และ REST APIs” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Android Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Android Academy มีบทเรียนทั้งหมด 6 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “Retrofit และ REST APIs”
ส่งคำขอ HTTP ด้วย Retrofit กำหนดอินเทอร์เฟซ API แปลง JSON ด้วย Gson/Moshi จัดการการตอบกลับและข้อผิดพลาด และผสานการทำงานกับโครูทีน คุณปฏิบัติ Android Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Android Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Android Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 6 บทเรียน
บทเรียน “Retrofit และ REST APIs” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Android Academy นี้ได้ไหม
ได้ บทเรียน Android Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- Retrofit และ REST APIs
- การโหลดรูปภาพด้วย Coil
- การจัดการข้อผิดพลาดและประสบการณ์ผู้ใช้
- การแจ้งเตือนแบบพุช
- WorkManager และงานเบื้องหลัง
- การเผยแพร่ไปยัง Play Store