🌐 1. Τι είναι τα Web Services;
Τα Web Services (Υπηρεσίες Ιστού) είναι προγράμματα που τρέχουν σε έναν server και επιτρέπουν σε διαφορετικές εφαρμογές να επικοινωνούν μεταξύ τους μέσω του internet.
Σκέψου ότι φτιάχνεις μια εφαρμογή καιρού. Αντί να μαζεύεις εσύ δεδομένα από μετεωρολογικούς σταθμούς, μπορείς να ζητήσεις τα δεδομένα από ένα Weather API (π.χ. OpenWeatherMap).
- Η εφαρμογή σου στέλνει ένα αίτημα στο API
- Το API απαντάει με δεδομένα (θερμοκρασία, υγρασία κ.λπ.)
- Η εφαρμογή σου εμφανίζει τα δεδομένα στον χρήστη
📋 Τι προσφέρουν τα Web Services;
| Πλεονέκτημα | Περιγραφή |
|---|---|
| Επαναχρησιμοποίηση | Πολλές εφαρμογές μπορούν να χρησιμοποιούν την ίδια υπηρεσία |
| Ανεξαρτησία | Το frontend και το backend μπορούν να αναπτυχθούν ξεχωριστά |
| Επεκτασιμότητα | Εύκολη προσθήκη νέων λειτουργιών |
| Διαλειτουργικότητα | Διαφορετικές γλώσσες/πλατφόρμες μπορούν να συνεργαστούν |
🔌 2. Τι είναι το REST API;
Το REST (Representational State Transfer) είναι ένα αρχιτεκτονικό στυλ για τη δημιουργία Web Services. Ένα REST API είναι μια διεπαφή που ακολουθεί τους κανόνες του REST.
Το REST API είναι σαν ένα μενού εστιατορίου:
- Το μενού σου λέει τι μπορείς να παραγγείλεις (endpoints)
- Εσύ δίνεις την παραγγελία (request)
- Η κουζίνα ετοιμάζει το φαγητό (server processing)
- Ο σερβιτόρος σου φέρνει το πιάτο (response)
📝 Βασικές Αρχές του REST
- Client-Server: Ο client (browser/app) και ο server είναι ξεχωριστά
- Stateless: Κάθε αίτημα είναι ανεξάρτητο - ο server δεν θυμάται προηγούμενα αιτήματα
- Uniform Interface: Χρησιμοποιούμε τυποποιημένες HTTP μεθόδους
- Resource-Based: Τα δεδομένα αναπαρίστανται ως "πόροι" (resources)
📬 3. HTTP Methods - Οι Μέθοδοι του REST
Το REST χρησιμοποιεί τις HTTP μεθόδους για να περιγράψει τι θέλουμε να κάνουμε με τα δεδομένα:
| Μέθοδος | Ενέργεια (CRUD) | Περιγραφή | Παράδειγμα |
|---|---|---|---|
GET |
Read (Ανάγνωση) | Παίρνουμε δεδομένα | Λίστα χρηστών |
POST |
Create (Δημιουργία) | Δημιουργούμε νέα δεδομένα | Νέος χρήστης |
PUT |
Update (Ενημέρωση) | Ενημερώνουμε υπάρχοντα δεδομένα | Αλλαγή email |
DELETE |
Delete (Διαγραφή) | Διαγράφουμε δεδομένα | Διαγραφή χρήστη |
Αυτές είναι οι 4 βασικές λειτουργίες που κάνουμε σε δεδομένα. Το REST τις αντιστοιχίζει στις HTTP μεθόδους.
🛣️ Παραδείγματα REST Endpoints
| Endpoint | Μέθοδος | Περιγραφή |
|---|---|---|
/api/users |
GET | Λίστα όλων των χρηστών |
/api/users/5 |
GET | Στοιχεία του χρήστη με id=5 |
/api/users |
POST | Δημιουργία νέου χρήστη |
/api/users/5 |
PUT | Ενημέρωση χρήστη με id=5 |
/api/users/5 |
DELETE | Διαγραφή χρήστη με id=5 |
📦 4. JSON - Η Γλώσσα Επικοινωνίας
Το JSON (JavaScript Object Notation) είναι το πιο δημοφιλές format για ανταλλαγή δεδομένων σε REST APIs. Είναι απλό και εύκολο στην ανάγνωση.
📄 Παράδειγμα JSON
- Τα κλειδιά είναι πάντα σε εισαγωγικά (διπλά)
- Τα strings είναι σε διπλά εισαγωγικά
- Οι αριθμοί χωρίς εισαγωγικά
- Boolean:
trueήfalse(πεζά) - Arrays:
[ ] - Objects:
{ }
5. Χρήση External API - OpenWeatherMap
Θα δουλέψουμε με το OpenWeatherMap API για να πάρουμε δεδομένα καιρού.
5.1 Τι είναι το API Key;
Για να καλέσουμε ένα external API, συνήθως χρειαζόμαστε API Key. Είναι σαν μια "ταυτότητα" της εφαρμογής μας.
5.2 Βήματα για απόκτηση API Key
- Sign up στο openweathermap.org
- Δημιουργία API Key από το μενού "API Keys"
- Κρατάμε το key (π.χ.
abcd1234)
5.3 Το Endpoint που θα χρησιμοποιήσουμε
Documentation: https://openweathermap.org/api/one-call-api
Υποχρεωτικά parameters:
| Param | Τι είναι |
|---|---|
q |
Όνομα πόλης (π.χ. Athens, Tripoli) |
appid |
API key |
Προαιρετικά (αλλά πολύ χρήσιμα):
| Param | Τι κάνει |
|---|---|
units |
metric (Celsius) |
lang |
el (ελληνικά) |
5.4 Παράδειγμα με πραγματικές τιμές (Αθήνα)
5.5 Πρώτο request με curl
Το curl είναι ένα εργαλείο γραμμής εντολών για αποστολή HTTP requests. Είναι ιδανικό για να τεστάρουμε APIs γρήγορα.
Αποτέλεσμα (raw - χωρίς μορφοποίηση):
Δύσκολο να διαβαστεί! Ας το κάνουμε όμορφο με την εντολή jq:
Αποτέλεσμα (όπως βγαίνει από το terminal):
Επεξήγηση πεδίων:
Το πεδίο "icon": "02d" μας δίνει τον κωδικό του εικονιδίου. Μπορούμε να το εμφανίσουμε με το URL:
https://openweathermap.org/img/wn/[email protected]

Το jq είναι εργαλείο για επεξεργασία JSON στο terminal. Εγκατάσταση:
- Mac:
brew install jq - Linux:
sudo apt install jq - Windows:
choco install jq
5.6 Κλήση με Postman
Το Postman είναι ένα γραφικό εργαλείο για testing APIs. Πιο εύκολο από το curl για αρχάριους.
Βήματα:
- Κατέβασε το Postman από postman.com/downloads
- Δημιούργησε νέο GET request
- Βάλε το URL:
https://api.openweathermap.org/data/2.5/weather - Στο tab Params πρόσθεσε:
| Key | Value |
|---|---|
q |
Athens |
units |
metric |
lang |
el |
appid |
YOUR_API_KEY |
Πάτα Send και θα δεις το JSON response με όμορφη μορφοποίηση!
- Αυτόματη μορφοποίηση JSON
- Αποθήκευση requests για μελλοντική χρήση
- Εύκολη διαχείριση headers και parameters
- History όλων των κλήσεων
5.7 Παράδειγμα: SMS API
Ας δούμε ένα διαφορετικό API που χρησιμοποιεί POST αντί για GET και διαφορετικό τρόπο authentication.
Base URL: https://services.yuboto.com/omni/v1
Send endpoint: https://services.yuboto.com/omni/v1/Send
| Στοιχείο | Τιμή |
|---|---|
| Method | POST |
| Content-Type | application/json; charset=utf-8 |
| Authorization | Basic <base64(API_KEY)> |
Στο OpenWeather είχαμε:
?appid=API_KEY
API key ως query parameter
Στο SMS API της Yuboto έχουμε:
Authorization: Basic <base64(...)>
API key μέσα σε HTTP header, κωδικοποιημένο με Base64
Τι είναι τελικά αυτό το Base64;
- Το Base64 ΔΕΝ είναι encryption
- ΔΕΝ δημιουργεί νέο κλειδί
- ΔΕΝ αλλάζει το API key σου
Είναι απλή μετατροπή μορφής (encoding).
Παράδειγμα:
Αν το API key σου είναι:
Όταν κάνεις:
Παίρνεις:
Αυτό ΔΕΝ είναι νέο secret. Είναι ο ίδιος ακριβώς χαρακτήρας, απλώς σε μορφή που επιτρέπεται σε HTTP headers.
Γιατί ζητάνε Base64 και όχι σκέτο το key;
Γιατί χρησιμοποιούν HTTP Basic Authentication. Το πρότυπο λέει:
Συνήθως τα credentials είναι username:password. Στην περίπτωση της Yuboto:
- Δεν υπάρχει username
- Χρησιμοποιούν μόνο το API key
- Το κάνουν base64 encode
Είναι design επιλογή του API.
Άρα τι στέλνεται πραγματικά στο request;
Αν γράφεις:
Ο server:
- Κάνει base64 decode
- Παίρνει πίσω:
my-secret-api-key - Το συγκρίνει με τη βάση του
- Αν ταιριάζει → OK
5.8 Κλήση SMS API με curl
Αναλυτική επεξήγηση κάθε γραμμής:
Διαφορές από το Weather API:
- GET vs POST: Το Weather χρησιμοποιεί GET (παράμετροι στο URL), το SMS χρησιμοποιεί POST (δεδομένα στο body)
- Query params vs JSON body: Διαφορετικός τρόπος αποστολής δεδομένων
- appid vs Basic Auth: Διαφορετικός τρόπος authentication
5.9 Αποστολή SMS με Postman
1. Δημιούργησε νέο Request
- Method:
POST - URL:
https://services.yuboto.com/omni/v1/Send
2. Authorization tab (Προσοχή!)
ΔΕΝ χρησιμοποιούμε το Authorization tab του Postman!
- Auth Type:
No Auth
Ο λόγος: Το Yuboto δεν θέλει Postman-style auth, θέλει χειροκίνητο header.
3. Headers tab (ΕΔΩ είναι το auth)
Πρόσθεσε ακριβώς αυτά τα 2 headers:
| Key | Value |
|---|---|
Content-Type |
application/json; charset=utf-8 |
Authorization |
Basic YOUR_BASE64_API_KEY |
Basic ... (με το "Basic " μπροστά)
4. Body tab
- Body → raw
- Type → JSON
Κάνε paste αυτό:
5. Πάτα Send
Αναμενόμενο αποτέλεσμα:
- Status:
200 OK
5.10 Θεωρία: PHP συναρτήσεις για API
file_get_contents()
Τι είναι: Συνάρτηση της PHP που διαβάζει περιεχόμενο από ένα αρχείο ή URL.
Πώς δουλεύει:
Η PHP:
- Στέλνει HTTP GET request
- Παίρνει την απάντηση
- Τη γυρίζει ως string
Στην περίπτωσή μας:
Το $json είναι απλό κείμενο, όχι δεδομένα PHP.
json_decode()
Τι κάνει: Μετατρέπει JSON string → PHP μεταβλητή.
Σύνταξη:
- 1ο όρισμα: το JSON string
- 2ο όρισμα (
true): θέλουμε PHP array
Χωρίς true → object (πιο δύσκολο για αρχή).
Γιατί τα κάνουμε αυτά;
| Βήμα | Τι έχουμε |
|---|---|
| API response | JSON string |
| json_decode | μεταφραστής |
| PHP | arrays |
5.11 Κώδικας PHP (weather.php)
6. Git - Συνεργατική Ανάπτυξη
Το Git είναι ένα σύστημα ελέγχου εκδόσεων (version control) που μας επιτρέπει να παρακολουθούμε αλλαγές στον κώδικα και να συνεργαζόμαστε με άλλους προγραμματιστές.
- Ιστορικό αλλαγών: Μπορούμε να δούμε ποιος άλλαξε τι και πότε
- Backup: Ο κώδικας αποθηκεύεται σε απομακρυσμένο server
- Συνεργασία: Πολλοί προγραμματιστές μπορούν να δουλεύουν ταυτόχρονα
- Rollback: Μπορούμε να γυρίσουμε πίσω σε προηγούμενη έκδοση
11.1 Εγκατάσταση Git
11.2 Αρχική Ρύθμιση
11.3 Βασικές Εντολές Git
| Εντολή | Περιγραφή |
|---|---|
git init |
Δημιουργία νέου repository |
git clone <url> |
Κλωνοποίηση υπάρχοντος repository |
git status |
Εμφάνιση κατάστασης αρχείων |
git add <file> |
Προσθήκη αρχείου στο staging |
git add . |
Προσθήκη ΟΛΩΝ των αρχείων |
git commit -m "msg" |
Αποθήκευση αλλαγών |
git push |
Αποστολή στον server |
git pull |
Λήψη από τον server |
git log |
Ιστορικό commits |
11.4 Πρακτικό Παράδειγμα
11.5 Branches - Κλαδιά
Τα branches μας επιτρέπουν να εργαζόμαστε σε νέες λειτουργίες χωρίς να επηρεάζουμε τον κύριο κώδικα.
Οπτικοποίηση Branches
main: ●───●───●───●───●───●
\ /
feature-login: ●───●───●
11.6 Συνεργασία με Pull Requests
Όταν εργαζόμαστε σε ομάδα με GitHub/GitLab:
- Clone: Κάθε μέλος κλωνοποιεί το repository
- Branch: Δημιουργεί δικό του branch για τη δουλειά του
- Commit + Push: Ανεβάζει τις αλλαγές του
- Pull Request: Ζητάει review από την ομάδα
- Merge: Αφού εγκριθεί, συγχωνεύεται στο main
- Κάνε
git pullπριν ξεκινήσεις να δουλεύεις - Γράψε περιγραφικά commit messages
- Κάνε μικρά, συχνά commits
- Δημιούργησε
.gitignoreγια αρχεία που δεν πρέπει να ανέβουν
11.7 Αρχείο .gitignore
Το αρχείο .gitignore λέει στο Git ποια αρχεία να αγνοήσει:
7. Ανακεφαλαίωση
- Web Services: Υπηρεσίες που επιτρέπουν επικοινωνία μεταξύ εφαρμογών
- REST API: Αρχιτεκτονικό στυλ με HTTP μεθόδους (GET, POST, PUT, DELETE)
- JSON: Το format ανταλλαγής δεδομένων
- External APIs: Χρήση εξωτερικών υπηρεσιών (π.χ. OpenWeatherMap) με API Key
- Front-end/Back-end: Ανεξάρτητη ανάπτυξη με επικοινωνία μέσω API
- Fetch API: JavaScript για κλήση REST APIs
- Git: Έλεγχος εκδόσεων και συνεργατική ανάπτυξη
- OpenWeatherMap: https://openweathermap.org/api
- GitHub: https://github.com
- Git Documentation: https://git-scm.com/doc
- MDN Fetch API: developer.mozilla.org/Fetch_API
- REST API Tutorial: https://restfulapi.net
Τέλος Μαθήματος 12
Web Services, REST APIs & Git