קוטלין עם קטור

1. סקירה כללית

Ktor מהווה מסגרת לבניית שרתים ולקוחות אסינכרוניים במערכות מחוברות באמצעות שפת התכנות החזקה של Kotlin. זה מאפשר פיתוח יישום עצמאי עם שרתים משובצים.

במדריך זה נבדוק כיצד ליצור יישום שרת עצמאי באמצעות Ktor.

2. הגדרת יישום Ktor

נתחיל בהקמת פרויקט Ktor. נשתמש Gradle שהיא הגישה המומלצת והקלה לשימוש. ניתן להתקין את Gradle על ידי ביצוע ההוראות המופיעות ב- Gradle אֲתַר.

צור את build.gradle קוֹבֶץ:

קבוצה 'com.baeldung.kotlin' גרסה '1.0-SNAPSHOT' buildscript {ext.kotlin_version = '1.2.40' ext.ktor_version = '0.9.2' מאגרים {mavenCentral ()} תלות {classpath "org.jetbrains.kotlin: kotlin-gradle-plugin: $ kotlin_version "}} החל תוסף: 'java' החל תוסף: 'kotlin' החל תוסף: 'application' mainClassName = 'APIServer.kt' sourceCompatibility = 1.8 compileKotlin {kotlinOptions.jvmTarget =" 1.8 "} compileTestKotlin {kotlinOptions.jvmTarget = "1.8"} קוטלין {{coroutines ניסיוני "מאפשר"}} מאגרים {mavenCentral () jcenter () maven {url "//dl.bintray.com/kotlin/ktor"}} תלות {קומפילציה "io .ktor: ktor-server-netty: $ ktor_version "קומפילציה" ch.qos.logback: logback-classic: 1.2.1 "testCompile group: 'junit', name: 'junit', version: '4.12'}

ייבאנו את Ktor ואת חבילת השרת Ktor netty. Netty הוא השרת המוטמע בו נשתמש בדוגמה זו.

3. בניית השרת

אנו יוצרים את היישום שלנו על ידי הוספת קוד לתיקיית המקור src / main / kotlin.

הנה, אנו יוצרים את הקובץ APIServer.kt בשיטה העיקרית:

ראשי מהנה (טוען: מערך) {} 

לאחר מכן, אנו יוצרים ומתחילים את שרת Netty המוטמע:

embeddedServer (Netty, 8080) {}. התחל (חכה = נכון) 

זה ייצור ויתחיל את השרת ביציאה 8080. קבענו חכה = נכון בתוך ה הַתחָלָה() שיטה להאזנה לחיבורים.

4. בניית ה- API

בואו נוסיף את ה- API. כדי לטפל בבקשות HTTP, Ktor מספק את ה- ניתוב תכונה.

אנו מפעילים את תכונת ניתוב עם להתקין חסום בו נוכל להגדיר מסלולים לנתיבים ספציפיים ולשיטות HTTP:

val jsonResponse = "" "{" id ": 1," task ":" שלם שטר מים "," תיאור ":" שלם חשבון מים היום ",}" "" embeddedServer (Netty, 8080) {install (Routing) {get ("/ todo") {call.respondText (jsonResponse, ContentType.Application.Json)}}}. התחל (חכה = נכון)

בדוגמה זו השרת יטפל ב- לקבל בקשה בשביל /לעשות וישיב עם לעשות אובייקט JSON. נלמד עוד על התקנת תכונות בסעיף התקנת תכונות.

5. הפעלת השרת

כדי להפעיל את השרת, אנו זקוקים למשימת הפעלה ב- Gradle:

משימת runServer (סוג: JavaExec) {main = 'APIServer' classpath = sourceSets.main.runtimeClasspath} 

כדי להפעיל את השרת, אנו קוראים למשימה זו:

./gradlew runServer 

לאחר מכן ניתן לגשת לממשק ה- API דרך // localhost: 8080 / todo.

6. התקנת תכונות

יישום Ktor מורכב בדרך כלל מסדרת תכונות. אנו יכולים לחשוב על תכונות כפונקציונליות המוזרקת לצינור הבקשה והתגובה.

משתמש ב DefaultHeaders אנו יכולים להוסיף כותרות לכל תגובה יוצאת. ניתוב היא תכונה נוספת המאפשרת לנו להגדיר מסלולים לטיפול בבקשות וכו '.

אנו יכולים גם לפתח את התכונות שלנו ולהתקין אותן.

בואו נסתכל על ידי הוספת כותרת מותאמת אישית לכל בקשה על ידי התקנת ה- DefaultHeaders תכונה:

install (DefaultHeaders) {header ("X-Developer", "Baeldung")}

באופן דומה, אנו יכולים לעקוף את כותרות ברירת המחדל שנקבעו על ידי מסגרת Ktor עצמה:

התקן (DefaultHeaders) {כותרת (HttpHeaders.Server, "השרת שלי")}

את רשימת כותרות ברירת המחדל הזמינות ניתן למצוא בכיתה io.ktor.features.DefaultHeaders.

7. הגשת JSON

בניית JSON מחמירה באופן ידני אינה קלה. Ktor מספק תכונה לשרת אובייקטים נתונים כ- JSON באמצעות Gson.

בואו נוסיף את התלות של Gson בתוכן שלנו build.gradle:

הידור "io.ktor: ktor-gson: $ ktor_version"

לדוגמא, אנו משתמשים באובייקט נתונים עם השם מְחַבֵּר:

מחלקת נתונים מחבר (שם שם: מחרוזת, אתר אתר: מחרוזת)

לאחר מכן, אנו מתקינים את gson תכונה:

התקן (ContentNegotiation) {gson {setPrettyPrinting ()}}

לבסוף, בואו להוסיף מסלול לשרת המשרת אובייקט מחבר כ- JSON:

קבל ("/ author") {val author = מחבר ("baeldung", "baeldung.com") call.respond (author)}

ממשק ה- API של המחבר יגיש את אובייקט נתוני המחבר כ- ג'סון.

8. הוספת בקרים

כדי להבין כיצד לטפל במספר בקשות פעולות HTTP בוא ניצור יישום TODO המאפשר למשתמש להוסיף, למחוק, להציג ולרשום פריטי TODO.

נתחיל בהוספת א לעשות מחלקת נתונים:

מחלקת נתונים ToDo (var id: Int, שם val: מחרוזת, תיאור val: מחרוזת, val הושלם: בוליאני) 

ואז אנו יוצרים רשימת מערך להחזיק מרובה לעשות פריטים:

val toDoList = ArrayList (); 

לאחר מכן, אנו מוסיפים את הבקרים לטיפול בקשות POST, DELETE ו- GET:

ניתוב () {route ("/ todo") {post {var toDo = call.receive (); toDo.id = toDoList.size; toDoList.add (toDo); call.respond ("נוסף")} delete ("/ {id}") {call.respond (toDoList.removeAt (call.parameters ["id"] !!. toInt ())); } קבל ("/ {id}") {call.respond (toDoList [call.parameters ["id"] !!. toInt ()]); } קבל {call.respond (toDoList); }}}

הוספנו א לעשותמַסלוּל ואז מיפה את בקשת פעלים ה- HTTP השונים לנקודת הקצה הזו.

9. מסקנה

במאמר זה למדנו כיצד ליצור יישום שרת Kotlin עם מסגרת Ktor.

בנינו אפליקציית שרתים קטנה תוך מספר דקות מבלי להשתמש בשום קוד הדוד.

כמו תמיד, ניתן למצוא את דגימות הקוד ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found