0Pricing
Android Academy · บทเรียน

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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. Retrofit และ REST APIs
  2. การโหลดรูปภาพด้วย Coil
  3. การจัดการข้อผิดพลาดและประสบการณ์ผู้ใช้
  4. การแจ้งเตือนแบบพุช
  5. WorkManager และงานเบื้องหลัง
  6. การเผยแพร่ไปยัง Play Store
← กลับไปที่ Android Academy