Menu
Coddy logo textTech

Özet - REST API Modelleri

Coddy'nin GO Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 78 / 107.

challenge icon

Görev

Kolay

Bir blog platformu için bir REST API model sistemi kuralım! JSON'a serileştirilen ve okunabilir dize gösterimleri sağlayan iyi yapılandırılmış türler oluşturacaksınız; bunlar tam olarak gerçek API yanıtları oluştururken ihtiyaç duyacağınız şeylerdir.

Kodunuzu iki dosya halinde düzenleyeceksiniz:

  • models.go: API veri modellerinizi uygun JSON etiketleri ve dize gösterimleriyle tanımlayın.

    ID (int), Name (string) ve Email (string) alanlarına sahip bir Author yapısı oluşturun. Bunları "id", "name" ve "email" JSON anahtarlarıyla eşleştirin. [Name] <[Email]> formatını döndürmek için String() metodunu uygulayın.

    ID (int), Title (string), Content (string), Author (iç içe geçmiş Author yapısı) ve Published (bool) alanlarına sahip bir Post yapısı oluşturun. Bunları "id", "title", "content", "author" ve "published" ile eşleştirin. Content alanı omitempty kullanmalıdır, böylece boş içerik JSON'da görünmez. "[Title]" by [Author's String representation] döndürmek için String() metodunu uygulayın.

    Success (bool), Message (string) ve Data (Post) alanlarına sahip bir APIResponse yapısı oluşturun. "success", "message" ve "data" ile eşleştirin. Message alanı omitempty kullanmalıdır.

  • main.go: API yanıtları oluşturun ve hem JSON çıktısını hem de dize gösterimlerini gösterin.

    Bir işlem türü (json veya display) okuyun, ardından gönderi ayrıntılarını okuyun: gönderi ID'si, başlık, içerik, yazar ID'si, yazar adı, yazar e-postası ve yayınlanma durumu (true veya false).

    json için: Success: true ve veri olarak Post içeren bir APIResponse oluşturun (Message alanını boş bırakın). JSON'a dönüştürün ve yazdırın.

    display için: Post'u oluşturun ve String metodunu kullanarak yazdırın, ardından Author'u yeni bir satırda ayrı olarak yazdırın.

Aşağıdaki girdiler sağlanacaktır:

  • Satır 1: İşlem türü (json veya display)
  • Satır 2: Gönderi ID'si
  • Satır 3: Başlık
  • Satır 4: İçerik (boş olabilir)
  • Satır 5: Yazar ID'si
  • Satır 6: Yazar adı
  • Satır 7: Yazar e-postası
  • Satır 8: Yayınlanma durumu (true veya false)

Örneğin, şu girdi verildiğinde:

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

Çıktınız şu olmalıdır:

{"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}}

Ve şu girdi verildiğinde:

json
2
Draft Post

102
John Doe
john@example.com
false

Çıktınız şu olmalıdır:

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

Boş içerik alanının JSON çıktısından nasıl çıkarıldığına dikkat edin.

Ve şu girdi verildiğinde:

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

Çıktınız şu olmalıdır:

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

Kendin dene

package main

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

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

	// İşlem türünü oku
	operation, _ := reader.ReadString('\n')
	operation = strings.TrimSpace(operation)

	// Gönderi ID'sini oku
	postIDStr, _ := reader.ReadString('\n')
	postID, _ := strconv.Atoi(strings.TrimSpace(postIDStr))

	// Başlığı oku
	title, _ := reader.ReadString('\n')
	title = strings.TrimSpace(title)

	// İçeriği oku
	content, _ := reader.ReadString('\n')
	content = strings.TrimSpace(content)

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

	// Yazar adını oku
	authorName, _ := reader.ReadString('\n')
	authorName = strings.TrimSpace(authorName)

	// Yazar e-postasını oku
	authorEmail, _ := reader.ReadString('\n')
	authorEmail = strings.TrimSpace(authorEmail)

	// Yayınlanma durumunu oku
	publishedStr, _ := reader.ReadString('\n')
	published := strings.TrimSpace(publishedStr) == "true"

	// TODO: Okunan değerlerle bir Author yapısı (struct) oluşturun

	// TODO: Okunan değerler ve Author ile bir Post yapısı (struct) oluşturun

	// TODO: İşlem türünü ele alın
	// Eğer işlem "json" ise:
	//   - Success: true ve Data olarak Post içeren bir APIResponse oluşturun
	//   - json.Marshal kullanarak JSON'a dönüştürün
	//   - JSON dizesini yazdırın
	// Eğer işlem "display" ise:
	//   - String metodunu kullanarak Post'u yazdırın
	//   - Yazarı yeni bir satıra yazdırın

	// Değişkenleri kullanmak için yer tutucu (uygularken kaldırın)
	_ = postID
	_ = title
	_ = content
	_ = authorID
	_ = authorName
	_ = authorEmail
	_ = published
	_ = operation
	_ = json.Marshal
	fmt.Println("TODO: Implement the solution")
}

Nesne Yönelimli Programlama bölümündeki tüm dersler