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 kita bangun sistem model REST API untuk platform blog! Kamu akan membuat tipe yang terstruktur dengan baik, yang diserialisasi menjadi 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-mu 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() agar 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 di JSON. Implementasikan String() agar 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 dan 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 (boleh kosong)
  • Baris 5: ID Author
  • Baris 6: Nama Author
  • Baris 7: Email Author
  • Baris 8: Status publikasi (true atau false)

Contohnya, jika diberikan:

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

Output-mu 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

Output-mu 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 dihilangkan dari output JSON.

Dan jika diberikan:

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

Output-mu 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 postingan
	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 telah dibaca

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

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

	// Penampung 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