WebSockets & Realtime Systems Programming · Pelajaran

WebSockets dengan API RESTful

Rancang arsitektur hibrida yang menggunakan WebSockets untuk melengkapi API REST tradisional dengan pembaruan dinamis.

Pelajaran 1 dari 311 langkah

WebSockets dengan API RESTful adalah pelajaran WebSockets & Realtime Systems Programming gratis di CoddyKit. Ini adalah pelajaran 1 dari 3. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar WebSockets & Realtime Systems Programming, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus WebSockets & Realtime Systems Programming mencakup 3 pelajaran total.

Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.

Why Hybrid Architectures?

Welcome! In this lesson, we'll explore how to combine two powerful web communication tools: RESTful APIs and WebSockets.

While both facilitate communication, they excel in different areas. A hybrid approach leverages their individual strengths to build robust, dynamic applications.

  • REST for initial data loading and traditional resource management.
  • WebSockets for instant, real-time data updates.

RESTful APIs: The Foundation

RESTful APIs are a cornerstone of modern web development. They follow a request-response model, typically over HTTP.

Think of them as ordering from a menu: you make a specific request (e.g., "Get me all products"), and the server responds with the data. They are great for:

  • Fetching static or infrequently changing data.
  • Performing one-time actions (creating, updating, deleting resources).
  • Initial page loads with existing information.

WebSockets: Real-time Dynamics

WebSockets, as you've learned, provide a persistent, full-duplex connection. This means data can flow simultaneously in both directions, without constant new requests.

They are like a live chat: once connected, messages can be sent back and forth instantly. This makes them perfect for:

  • Live data feeds (stock prices, sports scores).
  • Real-time notifications (new messages, activity alerts).
  • Collaborative applications (document editing).

Complementary, Not Competing

It's important to see REST and WebSockets as complementary tools, not competitors. They solve different problems efficiently.

Combining them allows you to handle both traditional data operations and real-time interactions within the same application, leading to a richer user experience.

A well-designed hybrid system uses each protocol where it makes the most sense.

The Hybrid Workflow

A common hybrid workflow looks like this:

  1. Client loads: Makes initial requests via REST to fetch existing data (e.g., a list of items).
  2. Client connects: Establishes a WebSocket connection for real-time updates related to that data.
  3. Server updates: Pushes new data or changes via WebSocket as they occur.
  4. Client interacts: Might use REST for specific resource actions (e.g., 'mark item as complete') and receive confirmation/updates via WebSocket.

Server: REST Endpoint for Data

First, let's set up a simple Node.js server with an Express REST endpoint. This endpoint will serve our initial list of 'items'.

This demonstrates how a client would initially fetch existing data. (Remember to npm install express)

const express = require('express');
const app = express();
const PORT = 3000;

let items = [
  { id: 1, name: 'Item A', status: 'pending' },
  { id: 2, name: 'Item B', status: 'completed' }
];

// REST endpoint to get all items
app.get('/api/items', (req, res) => {
  res.json(items);
});

app.listen(PORT, () => {
  console.log(`REST server listening on port ${PORT}`);
});

Server: Adding WebSocket Updates

Now, let's extend our server to include a WebSocket. This WebSocket will push real-time updates whenever an item's status changes.

We use the ws library and integrate it with our existing Express server. (Remember to npm install ws)

const express = require('express');
const WebSocket = require('ws');
const http = require('http');

const app = express();
const server = http.createServer(app);
const wss = new WebSocket.Server({ server });
const PORT = 3000;

let items = [
  { id: 1, name: 'Item A', status: 'pending' },
  { id: 2, name: 'Item B', status: 'completed' }
];

// REST endpoint to get all items
app.get('/api/items', (req, res) => {
  res.json(items);
});

// WebSocket connection handling
wss.on('connection', ws => {
  console.log('Client connected via WebSocket');

  // Simulate an item update every 5 seconds
  const interval = setInterval(() => {
    const itemToUpdate = items[Math.floor(Math.random() * items.length)];
    itemToUpdate.status = itemToUpdate.status === 'pending' ? 'completed' : 'pending';
    const updateMessage = JSON.stringify({ type: 'itemUpdate', item: itemToUpdate });
    wss.clients.forEach(client => {
      if (client.readyState === WebSocket.OPEN) {
        client.send(updateMessage);
      }
    });
  }, 5000);

  ws.on('close', () => {
    console.log('Client disconnected');
    clearInterval(interval);
  });
});

server.listen(PORT, () => {
  console.log(`Hybrid server listening on port ${PORT}`);
});

Client: Fetching Initial Data (JS)

On the client-side (e.g., in a web browser), you'd first use fetch or XMLHttpRequest to get the initial list of items from the REST API.

This ensures the user sees existing data immediately.

async function getInitialItems() {
  try {
    const response = await fetch('http://localhost:3000/api/items');
    const data = await response.json();
    console.log('Initial items (REST):', data);
    // Render initial items on the UI
  } catch (error) {
    console.error('Error fetching items:', error);
  }
}

getInitialItems();

Client: Subscribing to Live Updates (JS)

After fetching initial data, the client opens a WebSocket connection to receive real-time updates. When a message arrives, it can update the UI dynamically.

This keeps the displayed data fresh without constant page refreshes.

const ws = new WebSocket('ws://localhost:3000');

ws.onopen = () => {
  console.log('WebSocket connected!');
};

ws.onmessage = event => {
  const message = JSON.parse(event.data);
  if (message.type === 'itemUpdate') {
    console.log('Real-time item update:', message.item);
    // Update the specific item on the UI
  }
};

ws.onclose = () => {
  console.log('WebSocket disconnected.');
};

ws.onerror = error => {
  console.error('WebSocket error:', error);
};

Hybrid Use Cases

Which communication method is best for each scenario in a hybrid application?

Recap: Best of Both Worlds

You've learned how to design hybrid architectures that combine RESTful APIs and WebSockets.

  • REST excels for initial data loading and traditional CRUD operations due to its stateless, request-response nature.
  • WebSockets are perfect for instant, bidirectional communication, providing dynamic updates and real-time interactions.

By strategically using both, you can build performant and highly interactive applications. Next, we'll look at bridging WebSockets to message queues.

Gratis untuk memulai

Belajar WebSockets & Realtime Systems Programming dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
12
Pelajaran
47

Pertanyaan yang Sering Diajukan

Apakah pelajaran “WebSockets dengan API RESTful” gratis?

Ya — teks lengkap “WebSockets dengan API RESTful” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus WebSockets & Realtime Systems Programming, upgrade ke CoddyKit PRO. Kursus WebSockets & Realtime Systems Programming mencakup 3 pelajaran total.

Apa yang akan aku pelajari di “WebSockets dengan API RESTful”?

Rancang arsitektur hibrida yang menggunakan WebSockets untuk melengkapi API REST tradisional dengan pembaruan dinamis. Kamu berlatih WebSockets & Realtime Systems Programming dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai WebSockets & Realtime Systems Programming?

Tidak diperlukan pengalaman sebelumnya. WebSockets & Realtime Systems Programming di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 3.

Berapa lama pelajaran “WebSockets dengan API RESTful” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran WebSockets & Realtime Systems Programming ini?

Ya. Setiap pelajaran WebSockets & Realtime Systems Programming menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. WebSockets dengan API RESTful
  2. Menjembatani ke Antrean Pesan
  3. Mengalirkan Perubahan Basis Data ke Klien
← Kembali ke WebSockets & Realtime Systems Programming