ทำไมต้องใช้ Retrofit เมื่อเรามี OkHttp


110

ด้วย OkHttp เราสามารถส่งคำขอ HTTP จากนั้นได้รับการตอบสนองจากเซิร์ฟเวอร์

OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
  .url(url)
  .build();
Response response = client.newCall(request).execute();

จากนั้นด้วย Gson lib แปลงการตอบสนองต่อวัตถุที่เราต้องการ

นี่มาจาก Square / OkHttp doc:

API คำขอ / การตอบกลับได้รับการออกแบบโดยใช้เครื่องมือสร้างที่คล่องแคล่วและไม่เปลี่ยนรูป รองรับทั้งการบล็อกการโทรแบบซิงโครนัสและการโทรแบบไม่ซิงค์พร้อมการโทรกลับ

ฉันอ่านจากstackOverFlow

ชุดติดตั้งเพิ่มเติมใช้ OkHTTP โดยอัตโนมัติหากมี

.

คำถามของฉันคือ Retrofit คืออะไรกันแน่?

Retrofit ทำอะไรที่ OkHttp ทำไม่ได้?!

ฉันคิดว่า OkHttp และ Gson แก้ปัญหาคำขอ API ได้แล้ว Retrofit จะแก้ปัญหาอะไรให้เราได้บ้าง


2
ตามความคิดเห็นและมีแนวโน้มที่จะปิดเช่นนี้ ข้อเท็จจริงของเรื่องนี้คือทั้งมีอยู่จริงและไม่มีใครเสียชีวิต ซึ่งหมายความว่าทั้งสองมีกรณีการใช้งานที่ถูกต้องในสายตาของชุมชนนักพัฒนา Android
fge

1
ลองดูโพสต์นี้stackoverflow.com/q/16902716/1144203
ivan.sim

@isim เคยเห็นลิงค์นี้ แต่ไม่เข้าใจว่าทำไมต้อง Retrofit! และทำไม Retrofit ถึงใช้ OkHttp!
Mehrdad Faraji

@MehrdadFaraji คุณไม่จำเป็นต้อง Retrofit ถ้า OkHttp สามารถทำสิ่งที่คุณต้องการได้ เหตุใดชุดติดตั้งเพิ่มเติมจึงใช้ OkHttpมีบางสิ่งเช่นการเปิดใช้งานCallรูปแบบ OkHttp, ตัวสกัดกั้น OkHttp, การตรึงใบรับรอง ฯลฯ
ivan.sim

คำตอบ:


97

ด้วย OkHttp เราสามารถสร้างคำขอ HTTP จากนั้นรับการตอบสนองจากเซิร์ฟเวอร์ ... จากนั้นด้วย Gson lib แปลงการตอบสนองต่อวัตถุที่เราต้องการ

โปรดทราบว่าในข้อมูลโค้ดของคุณคุณข้ามขั้นตอนเด่น ๆ ไป 2 ขั้นตอน ได้แก่ การสร้าง URL และแยกวิเคราะห์ JSON โดยใช้ Gson

คำถามของฉันคือ Retrofit คืออะไรกันแน่?

มีไว้สำหรับการสร้าง URL (โดยใช้โค้ดที่สร้างแบบรับรู้ที่เชื่อมโยงกับ REST API เฉพาะของคุณ) และแยกวิเคราะห์ JSON โดยใช้ Gson กล่าวอีกนัยหนึ่งก็คือสิ่งที่คุณข้ามไปในข้อมูลโค้ดของคุณ

นอกจากนี้สำหรับการดำเนินการ REST บางประเภท (เช่น POST) จะช่วยในการรวบรวมสิ่งที่จะส่ง (เช่นการสร้างรูปแบบที่เข้ารหัส)

ตามความหมายคุณไม่จำเป็นต้องใช้ Retrofit Retrofit คือรหัสคอมพิวเตอร์ที่เขียนโดยโปรแกรมเมอร์คอมพิวเตอร์ คนอื่นสามารถเขียนโค้ดเพื่อทำสิ่งที่ Retrofit ทำ

เหตุใดชุดติดตั้งเพิ่มเติมจึงใช้ OkHttp

ชุดติดตั้งเพิ่มเติมจำเป็นต้องดำเนินการ HTTP ใช้ OkHttp หากมีให้สำหรับทุกสิ่งที่ OkHttp มีให้: การสนับสนุน HTTP / 2 และ SPDY ตัวดักจับแบบเสียบได้ ฯลฯ


32

คุณควรใช้ชุดติดตั้งเพิ่มเติมหากคุณพยายามแมป API เซิร์ฟเวอร์ของคุณภายในแอปพลิเคชันของคุณ (type-safeing) Retrofit เป็นเพียงอะแดปเตอร์ API ที่ห่อหุ้มด้วย okHTTP

หากคุณต้องการพิมพ์รหัสโต้ตอบที่ปลอดภัยและแยกส่วนกับ API ของคุณให้ใช้ชุดติดตั้งเพิ่มเติม นอกเหนือจากนั้นประสิทธิภาพพื้นฐานค่าเริ่มต้นของคำขอ ฯลฯ ของ okHTTP และ Retrofit จะเหมือนกัน

นอกจากนี้ฉันขอแนะนำให้ฟังพอดคาสต์นี้จาก Jesse Wilson (ผู้พัฒนาไคลเอนต์ Android HTTP รายใหญ่) ซึ่งเขาพูดถึงประวัติความเป็นมาของการพัฒนาไคลเอนต์ Apache HTTP, HTTPURLConnection, okHTTP และ Retrofit ในเชิงลึก


24

การติดตั้งเพิ่มเติมกับ OkHttp เหตุผลนั้นง่ายมาก : OkHttp เป็นไคลเอนต์ HTTP / SPDY บริสุทธิ์ที่รับผิดชอบการทำงานของเครือข่ายระดับต่ำการแคชคำขอและการจัดการการตอบสนองและอื่น ๆ อีกมากมาย ในทางตรงกันข้าม Retrofit คือการสร้างนามธรรม REST ระดับสูงที่ด้านบนของ OkHttp ชุดติดตั้งเพิ่ม 2 ทำงานร่วมกับ OkHttp และใช้ประโยชน์ได้อย่างเข้มข้น

ฟังก์ชั่น OkHttp: การรวมการเชื่อมต่อ, การบีบอัด, การแคช, การกู้คืนจากปัญหาเครือข่าย, การซิงค์และการโทรแบบไม่ซิงค์, เปลี่ยนเส้นทาง, ลองใหม่ ... และอื่น ๆ

ฟังก์ชั่นการติดตั้งเพิ่มเติม: การจัดการ URL, การร้องขอ, การโหลด, การแคช, เธรด, การซิงโครไนซ์ ... ช่วยให้สามารถซิงค์และเรียกแบบไม่ซิงค์ได้


0

การติดตั้งเพิ่มเติมเป็นสถาปัตยกรรมที่อยู่เหนือ OKHTTP โดยภายในจะใช้ OkHttp เพื่อส่งคำขอใด ๆ ก่อนหน้านี้ใน jave หากเราต้องการส่งคำขอใด ๆ ที่เรามีการเชื่อมต่อ HTTPUrl หรือการเชื่อมต่อ HTTPS Url รู้ว่าชุดติดตั้งเพิ่ม okHttp จัดการทุกอย่าง (แบ่งเป็นแพ็คเกจที่ทำเครื่องหมายส่วนหัว) เราหากเราต้องการส่งข้อมูลบางอย่าง

การติดตั้งเพิ่มเติมเป็นไคลเอนต์ที่เหลือซึ่งยึดตามหลักการพักผ่อน

-> OkHttp เป็นไคลเอนต์ HTTP ซึ่งรองรับ HTTP / 2 และ SPDY

-> Retrofit เป็นไคลเอนต์ HTTP ที่ปลอดภัยสำหรับ Android และ java

-> OkHttp ขึ้นอยู่กับ Okio

-> ชุดติดตั้งเพิ่มเติมขึ้นอยู่กับ OkHttP

ดังนั้นชุดติดตั้งเพิ่มเติมจึงเป็นกระดาษห่อหุ้มบน OKHTTP ซึ่งใช้เมื่อจำเป็นและสามารถจัดการการหมดเวลาการเชื่อมต่อและการหมดเวลาอ่านได้อย่างง่ายดายเพียงแค่ใช้วิธีการดังกล่าวและยังเพิ่ม Interceptor

หวังว่าจะได้คำตอบ !!! โครตมีความสุข !!!!

สำหรับข้อมูลเพิ่มเติมโปรดดูที่https://square.github.io/retrofit

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.