← Назад к вопросам

Для чего используется Redux?

1.0 Junior🔥 131 комментариев
#Фреймворки и библиотеки

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

GET vs POST - Fundamentalne razlike

GET i POST su dva najčešće korišćena HTTP metoda. Obe se koriste za slanje podataka sa klijenta na server, ali imaju različite karakteristike i upotrebe.

GET zahtjev

Karakteristike:

  • Parametri se šalju u URL-u
  • Vidljivi korisnicima (u URL bar-u)
  • Limitirani su po veličini (obično ~2000 karaktera)
  • Ne mogu se slati binarne podatke
  • Idempotentni - ista poziva daje iste rezultate
  • Cachiraju se u browseru
  • Čuvaju se u istoriji pregledavanja
// GET zahtjev
// URL: /api/v1/users?name=John&age=30

route::get('/users', function () {
    $name = request('name'); // 'John'
    $age = request('age'); // '30'
    return User::query()
        ->when($name, fn($q) => $q->where('name', $name))
        ->when($age, fn($q) => $q->where('age', $age))
        ->get();
});

POST zahtjev

Karakteristike:

  • Parametri se šalju u telu zahtjeva (body)
  • Nisu vidljivi korisnicima
  • Praktički neograničena veličina
  • Mogu se slati binarni podaci, fajlovi
  • Nisu idempotentni - multiple poziva kreiraju multiple resurse
  • Ne cachiraju se automatski
  • Ne čuvaju se u istoriji pregledavanja
// POST zahtjev
route::post('/users', function () {
    $data = request()->validate([
        'name' => 'required|string',
        'email' => 'required|email',
        'password' => 'required|min:8'
    ]);
    
    return User::create($data);
});

Direktna poređenja

KarakteristikaGETPOST
Vidljivost podatakaVidljivi u URLSkriveni
VeličinaDo ~2000 charPraktički neograničeno
BrzinaBrži (URL je kraća)Malo sporiji
SigurnostManja (podaci vidljivi)Veća (u body)
CachiranjeDa (automatski)Ne
Binarne podatkeNeDa
Istorija pregledavanjaČuva seNe čuva se
IdempotentnostDa (safe)Ne
CORSJednostavnijeKompleksnije

Primjeri - GET zahtjevi

1. Pretraga

// GET /search?q=laptop&category=electronics
route::get('/search', function () {
    $query = request('q');
    $category = request('category');
    
    return Product::query()
        ->where('name', 'like', "%{$query}%")
        ->when($category, fn($q) => $q->where('category', $category))
        ->get();
});

2. Filtriranje i paginacija

// GET /api/v1/posts?page=2&per_page=20&sort=created_at
route::get('/posts', function () {
    return Post::query()
        ->paginate(request('per_page', 15))
        ->sortBy(request('sort', 'created_at'));
});

3. Dobijanje specifičnog resursa

// GET /api/v1/users/123
route::get('/users/{id}', function ($id) {
    return User::findOrFail($id);
});

Primjeri - POST zahtjevi

1. Kreiranje novog resursa

// POST /api/v1/users
// Body: {"name": "John", "email": "john@example.com"}

route::post('/users', function () {
    $user = User::create(request()->validate([
        'name' => 'required|string',
        'email' => 'required|email|unique:users'
    ]));
    
    return response()->json($user, 201);
});

2. Slanje fajla

// POST /api/v1/upload
// Multipart form data sa fajlom

route::post('/upload', function () {
    if (!request()->hasFile('image')) {
        return response()->json(['error' => 'No file'], 400);
    }
    
    $file = request()->file('image');
    $path = $file->store('uploads');
    
    return response()->json(['path' => $path]);
});

3. Login/Autentifikacija

// POST /api/v1/login
// Body: {"email": "user@example.com", "password": "secret"}

route::post('/login', function () {
    $credentials = request()->validate([
        'email' => 'required|email',
        'password' => 'required'
    ]);
    
    $user = User::where('email', $credentials['email'])->first();
    
    if (!$user || !Hash::check($credentials['password'], $user->password)) {
        return response()->json(['error' => 'Invalid credentials'], 401);
    }
    
    $token = $user->createToken('api_token')->plainTextToken;
    return response()->json(['token' => $token]);
});

Javna pravila (REST API)

Kada koristiti GET:

  • Čitanje podataka - GET /api/v1/users
  • Filtriranje - GET /api/v1/posts?category=tech
  • Pretraga - GET /api/v1/search?q=term
  • Sortiranje/Paginacija - GET /api/v1/items?page=2&sort=name

Kada koristiti POST:

  • Kreiranje resursa - POST /api/v1/users
  • Slanje kompleksnih podataka
  • Upload fajlova
  • Login/Autentifikacija
  • Operacije sa side effects - POST /api/v1/orders

Sigurnosne razlike

GET je MANJE bezbedan:

// LOSE - password u GET zahtjevu!
// GET /api/v1/login?email=user@example.com&password=secret123

POST je BEZBEDAN:

// DOBRO - password u body-ju
POST /api/v1/login
Body: {"email": "user@example.com", "password": "secret123"}

Caching razlike

GET se cachira:

// GET zahtjevi se mogu cachirati u browser-u
route::get('/data', function () {
    return response()->json($data)
        ->header('Cache-Control', 'public, max-age=3600');
});

POST se obično ne cachira:

// POST zahtjevi se obično ne cachiraju
route::post('/data', function () {
    return response()->json($result)
        ->header('Cache-Control', 'no-cache');
});

Praktični primjer - Komplatna forma

// HTML forma
<form method="GET" action="/search">
    <input type="text" name="q" placeholder="Search...">
    <button type="submit">Search</button>
</form>

// PHP handler - GET za pretragu
route::get('/search', function () {
    $query = request('q');
    $results = Product::where('name', 'like', "%{$query}%")->get();
    return view('search.results', ['results' => $results]);
});

// HTML forma sa osjetljivim podacima
<form method="POST" action="/create-user">
    @csrf
    <input type="text" name="name" required>
    <input type="email" name="email" required>
    <input type="password" name="password" required>
    <button type="submit">Create</button>
</form>

// PHP handler - POST za kreiranje
route::post('/create-user', function () {
    $data = request()->validate([
        'name' => 'required|string',
        'email' => 'required|email|unique:users',
        'password' => 'required|min:8|confirmed'
    ]);
    
    User::create($data);
    return redirect('/users')->with('success', 'User created');
});

HTTPS razmatranja

Mada se koriste HTTP metode, HTTPS šifrira SVEEE:

  • GET parametri se šifriraju u HTTPS-u
  • POST body se šifrira u HTTPS-u
  • Uvijek koristite HTTPS u produkciji!
// Provjera da li je HTTPS
if (!request()->secure()) {
    return redirect()->secure(request()->getRequestUri());
}

Zaključak: GET je za čitanje i sigurne operacije, POST je za promene podataka, slanje osjetljivih informacija i operacije sa side effects.

Для чего используется Redux? | PrepBro