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 REST API model sistemi oluşturalım! JSON'a serileştirilen ve okunabilir dize gösterimleri sağlayan, gerçek API yanıtları oluştururken tam olarak ihtiyaç duyacağınız iyi yapılandırılmış türler oluşturacaksınız.

Kodunuzu iki dosyada düzenleyeceksiniz:

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

    Author yapısını ID (int), Name (string) ve Email (string) alanlarıyla oluşturun. Bunları "id", "name" ve "email" JSON anahtarlarıyla eşleyin. String() biçimini döndürecek şekilde [Name] <[Email]> yöntemini uygulayın.

    Post yapısını ID (int), Title (string), Content (string), Author (iç içe Author yapısı) ve Published (bool) alanlarıyla oluşturun. Bunları "id", "title", "content", "author" ve "published" ile eşleyin. Boş içeriğin JSON'da görünmemesi için Content alanı omitempty kullanmalıdır. String() döndürecek şekilde "[Title]" by [Author's String representation] yöntemini uygulayın.

    APIResponse yapısını Success (bool), Message (string) ve Data (Post) alanlarıyla oluşturun. Bunları "success", "message" ve "data" ile eşleyin. Message alanı omitempty kullanmalıdır.

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

    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ımlanma durumu (true veya false).

    json için: Success: true olan ve gönderiyi veri olarak 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 yöntemini kullanarak yazdırın, ardından Author'u ayrı olarak yeni bir satırda yazdırın.

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

  • 1. satır: İşlem türü (json veya display)
  • 2. satır: Gönderi ID'si
  • 3. satır: Başlık
  • 4. satır: İçerik (boş olabilir)
  • 5. satır: Yazar ID'si
  • 6. satır: Yazar adı
  • 7. satır: Yazar e-postası
  • 8. satır: Yayımlanma 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 şöyle 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 şöyle 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ında nasıl atlandığı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 şöyle 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ın durumunu oku
	publishedStr, _ := reader.ReadString('\n')
	published := strings.TrimSpace(publishedStr) == "true"

	// TODO: Okunan değerlerle bir Author struct oluştur

	// TODO: Okunan değerler ve Author ile bir Post struct oluştur

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

	// Değişkenleri kullanmak için yer tutucu (uygularken kaldır)
	_ = 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

Kendi başına pratik yap: Online Go derleyicisi