Junior
Τι είναι το REST;
sobes.tech AI
Απάντηση από AI
REST (Αντιπροσωπευτική Μεταφορά Κατάστασης) είναι ένα αρχιτεκτονικό στυλ για την κατασκευή κατανεμημένων συστημάτων, που χρησιμοποιείται κυρίως στον σχεδιασμό υπηρεσιών ιστού. Βασίζεται σε ένα σύνολο αρχών και περιορισμών που καθορίζουν πώς αλληλεπιδρούν οι πόροι του διαδικτύου.
Βασικές αρχές του REST:
- Πελάτης-διακομιστής: Ξεκάθαρη διαχωρισμός των ευθυνών μεταξύ πελάτη και διακομιστή.
- Χωρίς κατάσταση (stateless): Ο διακομιστής δεν αποθηκεύει πληροφορίες σχετικά με την κατάσταση του πελάτη μεταξύ των αιτημάτων. Κάθε αίτημα περιέχει όλες τις απαραίτητες πληροφορίες.
- Μπορεί να αποθηκευτεί στην cache: Οι πελάτες μπορούν να αποθηκεύουν στην cache τις απαντήσεις του διακομιστή για βελτίωση της απόδοσης. Ο διακομιστής δηλώνει ρητά αν η απάντηση μπορεί να αποθηκευτεί.
- Πολυεπίπεδο σύστημα: Ο πελάτης μπορεί να αλληλεπιδράσει με ένα ενδιάμεσο επίπεδο (π.χ., proxy, load balancer) χωρίς να το γνωρίζει.
- Κώδικας κατ' αίτηση (προαιρετικό): Ο διακομιστής μπορεί να μεταφέρει εκτελέσιμο κώδικα στον πελάτη (π.χ., JavaScript), επεκτείνοντας τη λειτουργικότητα του πελάτη.
- Ομοιόμορφη διεπαφή: Ο πιο σημαντικός κανόνας, που περιλαμβάνει:
- Αναγνώριση πόρων (URI).
- Διαχείριση πόρων μέσω αναπαραστάσεων (ανταλλαγή δεδομένων σε συγκεκριμένη μορφή, π.χ., JSON, XML).
- Αυτό-περιγραφόμενα μηνύματα (τα μηνύματα περιέχουν όλες τις απαραίτητες πληροφορίες).
- HATEOAS (Hypermedia as the Engine of Application State): Ο πελάτης μεταβαίνει μεταξύ καταστάσεων της εφαρμογής χρησιμοποιώντας υπερσυνδέσμους που περιέχονται στις απαντήσεις του διακομιστή.
Το RESTful API είναι μια υλοποίηση του στυλ REST για υπηρεσίες ιστού, που χρησιμοποιεί τις τυπικές μεθόδους HTTP (GET, POST, PUT, DELETE) για εργασία με πόρους.
// Παράδειγμα χρήσης των μεθόδων HTTP σε RESTful API
// Λήψη πόρου
// GET /api/products/1
// Δημιουργία πόρου
// POST /api/products
// Σώμα: { "name": "Νέο Προϊόν", "price": 10.50 }
// Ενημέρωση πόρου
// PUT /api/products/1
// Σώμα: { "name": "Ενημερωμένο Προϊόν", "price": 11.00 }
// Διαγραφή πόρου
// DELETE /api/products/1