Axios¶
Az Axios egy HTTP kliens, amely lehetővé teszi az aszinkron kérések küldését a böngészőből. Az Axios egy Promise-alapú API-t használ, amely lehetővé teszi a könnyű használatot a böngészőben és a Node.js környezetben is.
Telepítés¶
Telepítsd az Axios-t a következő paranccsal:
Használat¶
React projekt esetén hozzunk létre az src mappában belül egy apiClient.ts fájlt, és írjuk bele az alábbi kódot:
import axios from "axios";
export const BACKEND_URL = "http://localhost:8001/api";
const apiClient = axios.create({
baseURL: BACKEND_URL,
headers: {
"Content-Type": "application/json",
},
});
export default apiClient;
A továbbiakban amikor használjuk az Axios-t, importáljuk az apiClient.ts fájlt, és használjuk az Axios metódusait.
Így elkerülhető, hogy minden esetben meg kelljen adnunk a teljes URL-t és a fejlécet, továbbá könnyen módosíthatjuk az alap URL-t.
Autenfikáció esetén a headers objektumhoz hozzáadhatjuk az autentikációs adatokat is, így ezeket sem kell minden egyes kérésnél megadnunk.
CRUD¶
A CRUD műveletek (Create, Read, Update, Delete) megvalósításához az Axios post, get, put és delete metódusait használhatjuk.
GET kérés¶
GET kérés esetén használjuk az Axios get metódusát, amely egy Promise-t ad vissza.
Ehhez felhasználjuk az apiClient objektumot, amelyet korábban létrehoztunk, így már csak a konkrét végpontot kell megadnunk, a többit az apiClient objektum kezeli.
apiClient
.get("/pizzak")
.then((response) => setPizzak(response.data))
.catch((reason) => alert(reason));
Komplett példa
Kérjük ki az összes bannert az alábbi endpointról, majd jelenítsük meg!
Első lépésben csináljuk meg a típusát az új objektumnak, amit a backend vissza fog majd adni.
export type Pizza = {
nev: string;
leiras: string;
ar: number;
imageUrl: string;
id: number;
};
import { useEffect, useState } from "react";
import "./App.css";
import apiClient, { BACKEND_URL } from "./api/apiClient";
import type { Pizza } from "./types/Pizza";
function App() {
const [pizzak, setPizzak] = useState<Array<Pizza>>([]);
useEffect(() => {
apiClient
.get("/pizzak")
.then((response) => setPizzak(response.data))
.catch((reason) => alert(reason));
}, []);
return (
<>
{pizzak.map((p) => (
<p>
{p.nev}
<img src={`${BACKEND_URL}/kepek/${p.imageUrl}`} width={300} />
</p>
))}
</>
);
}
export default App;
VSC¶

POST kérés¶
A post kérés segítségével új adatokat küldhetünk a szervernek. Az előzőekben elkészített típusunkat használjuk, hogy a backend megfelelően tudja kezelni az adatokat.
|
PUT kérés¶
A put kérés segítségével módosíthatjuk az adatokat a szerveren.
Itt két dologra kell figyelnünk:
- Az ID-t, amely alapján azonosítjuk az adatot.
- Az adatokat, amelyeket módosítani szeretnénk.
|
DELETE kérés¶
A delete kérés segítségével törölhetjük az adatokat a szerverről. Ebben az esetben csak az ID-t kell megadnunk, amely alapján azonosítjuk az adatot.
Basic autentikáció¶
Az Axios segítségével egyszerűen megvalósítható a basic autentikáció. A basic autentikációhoz során minden alkalommal el kell küldenünk a felhasználónevet és a jelszót a szervernek.
Példa
axios
.get("http://localhost:8001/api/rendelesek", {
auth: {
username: "admin",
password: "12345",
},
})
.then((response) => {
console.log(response.data);
})
.catch((error) => {
console.error(error);
});
Példa API¶
docker-compose.yml¶
services:
backend:
container_name: kr-backend
image: ghcr.io/rkorom/sampleapis:latest
restart: "always"
ports:
- "3000:3000"
- "8000:8000"
- "8001:8001"
- "8002:8002"
- "8003:8003"
- "8004:8004"
- "8005:8005"
labels:
- "com.centurylinklabs.watchtower.enable=true"
watchtower:
container_name: kr-watchtower
image: containrrr/watchtower:latest
restart: "always"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
WATCHTOWER_CLEANUP: "true"
WATCHTOWER_POLL_INTERVAL: "300" # seconds
command: --label-enable