Menu
CoddyTech

Ringkasan, Model REST API

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GO di Coddy. Pelajaran 78 dari 107.

challenge icon

Tantangan

Mudah

Mari buat sistem model REST API untuk platform blog! Kamu akan membuat tipe yang terstruktur dengan baik, yang diserialisasi ke JSON dan menyediakan representasi string yang mudah dibaca, persis seperti yang kamu perlukan saat membuat respons API sungguhan.

Kamu akan mengatur kodemu dalam dua file:

  • models.go: Definisikan model data API dengan tag JSON dan representasi string yang sesuai.

    Buat struct Author dengan field ID (int), Name (string), dan Email (string). Petakan field-field ini ke kunci JSON "id", "name", dan "email". Implementasikan String() untuk mengembalikan format [Name] <[Email]>.

    Buat struct Post dengan field ID (int), Title (string), Content (string), Author (struct Author bersarang), dan Published (bool). Petakan field-field ini ke "id", "title", "content", "author", dan "published". Field Content harus menggunakan omitempty agar konten kosong tidak muncul dalam JSON. Implementasikan String() untuk mengembalikan "[Title]" by [Author's String representation].

    Buat struct APIResponse dengan field Success (bool), Message (string), dan Data (Post). Petakan field-field ini ke "success", "message", dan "data". Field Message harus menggunakan omitempty.

  • main.go: Buat respons API dan tunjukkan output JSON serta representasi string.

    Baca tipe operasi (json atau display), lalu baca detail post: ID post, judul, konten, ID penulis, nama penulis, email penulis, dan status publikasi (true atau false).

    Untuk json: Buat APIResponse dengan Success: true dan Post sebagai data (biarkan Message kosong). Ubah menjadi JSON lalu cetak.

    Untuk display: Buat Post dan cetak menggunakan method String-nya, lalu cetak Author secara terpisah pada baris baru.

Input berikut akan diberikan:

  • Baris 1: Tipe operasi (json atau display)
  • Baris 2: ID Post
  • Baris 3: Judul
  • Baris 4: Konten (bisa kosong)
  • Baris 5: ID Author
  • Baris 6: Nama Author
  • Baris 7: Email Author
  • Baris 8: Status publikasi (true atau false)

Sebagai contoh, jika diberikan:

json
1
Getting Started with Go
Learn the basics of Go programming
101
Jane Smith
jane@example.com
true

Outputmu seharusnya:

{"success":true,"data":{"id":1,"title":"Getting Started with Go","content":"Learn the basics of Go programming","author":{"id":101,"name":"Jane Smith","email":"jane@example.com"},"published":true}}

Dan jika diberikan:

json
2
Draft Post

102
John Doe
john@example.com
false

Outputmu seharusnya:

{"success":true,"data":{"id":2,"title":"Draft Post","author":{"id":102,"name":"John Doe","email":"john@example.com"},"published":false}}

Perhatikan bahwa field konten yang kosong tidak disertakan dalam output JSON.

Dan jika diberikan:

display
3
Advanced Interfaces
Deep dive into Go interfaces
103
Alice Chen
alice@example.com
true

Outputmu seharusnya:

"Advanced Interfaces" by Alice Chen <alice@example.com>
Alice Chen <alice@example.com>

Coba sendiri

package main

import (
	"bufio"
	"encoding/json"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func main() {
	reader := bufio.NewReader(os.Stdin)

	// Baca jenis operasi
	operation, _ := reader.ReadString('\n')
	operation = strings.TrimSpace(operation)

	// Baca ID post
	postIDStr, _ := reader.ReadString('\n')
	postID, _ := strconv.Atoi(strings.TrimSpace(postIDStr))

	// Baca judul
	title, _ := reader.ReadString('\n')
	title = strings.TrimSpace(title)

	// Baca konten
	content, _ := reader.ReadString('\n')
	content = strings.TrimSpace(content)

	// Baca ID penulis
	authorIDStr, _ := reader.ReadString('\n')
	authorID, _ := strconv.Atoi(strings.TrimSpace(authorIDStr))

	// Baca nama penulis
	authorName, _ := reader.ReadString('\n')
	authorName = strings.TrimSpace(authorName)

	// Baca email penulis
	authorEmail, _ := reader.ReadString('\n')
	authorEmail = strings.TrimSpace(authorEmail)

	// Baca status publikasi
	publishedStr, _ := reader.ReadString('\n')
	published := strings.TrimSpace(publishedStr) == "true"

	// TODO: Buat struct Author dengan nilai yang dibaca

	// TODO: Buat struct Post dengan nilai yang dibaca dan Author

	// TODO: Tangani jenis operasi
	// Jika operation bernilai "json":
	//   - Buat APIResponse dengan Success: true dan Post sebagai Data
	//   - Ubah menjadi JSON menggunakan json.Marshal
	//   - Cetak string JSON
	// Jika operation adalah "display":
	//   - Cetak Post menggunakan method String miliknya
	//   - Cetak Author pada baris baru

	// Penanda sementara untuk menggunakan variabel (hapus saat kamu mengimplementasikannya)
	_ = postID
	_ = title
	_ = content
	_ = authorID
	_ = authorName
	_ = authorEmail
	_ = published
	_ = operation
	_ = json.Marshal
	fmt.Println("TODO: Implement the solution")
}

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Go online