2025. március 12., szerda

REST API készítése közlekedési balesetek elemzéséhez

Adott egy traffic_analysis nevű adatbázis, amely közlekedési balesetekről tartalmaz információkat. Az adatbázisban megtalálhatók a következő táblák:

  • locations (helyszínek)
  • dates (időpontok)
  • weather_conditions (időjárási körülmények)
  • vehicle_types (jármű típusok)
  • accident_causes (balesetek okai)
  • traffic_accidents (balesetek fő táblája, amely kapcsolja a fenti táblákat)

Feladat leírása

Készíts egy REST API-t, amely lehetővé teszi a traffic_accidents adatainak lekérdezését, felvitelét, módosítását és törlését. A REST API-nak a következő kritériumoknak kell megfelelnie:

  1. Engedélyezze a Cross-Origin Resource Sharing-et (CORS).
  2. Kezelje le megfelelően az alábbi HTTP metódusokat:
    • GET: Adatok lekérése
    • Az összes baleset adatainak listázása
    • Egy adott baleset lekérése (ID alapján)
  3. Adatok létrehozása (POST metódussal).
  4. Adatok frissítése (PUT metódussal).
  5. Adatok törlése (DELETE metódussal).

Technikai követelmények:

  • Az API válaszai JSON formátumban legyenek.
  • Az API URL-struktúrája REST-konvenciókat kövesse. (Pl.: /api/accidents vagy /api/accidents)
  • Hibakezelés megfelelő HTTP státuszkódokkal (pl. 200, 201, 400, 404, 405 stb.).
  • Az API legyen procedurális vagy objektumorientált, technológiától függően.

Példa API végpontok:

  • GET /api/accidents (összes baleset lekérdezése)
  • GET /api/accidents/{id} (egy baleset részletes lekérdezése)
  • POST /api/accidents (új baleset hozzáadása)
  • PUT /api/accidents/{id} (egy baleset adatainak frissítése)
  • DELETE /api/accidents/{id} (egy baleset törlése)

Benyújtandó anyagok:

  • A REST API fájlok (pl. api.php, server.js, stb.)
  • Az adatbázis kapcsolódási konfiguráció (connect.php vagy hasonló)
  • Képernyő képek a tesztelésről

GET kérés tesztelése:
GET kérés id alapján
POST kérés: 

PUT:
DELETE

Adatbázis:
-- phpMyAdmin SQL Dump
-- version 5.2.0
-- https://www.phpmyadmin.net/
--
-- Gép: 127.0.0.1
-- Létrehozás ideje: 2025. Már 12. 22:16
-- Kiszolgáló verziója: 10.4.27-MariaDB
-- PHP verzió: 8.2.0

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Adatbázis: `traffic_analysis`
--

-- --------------------------------------------------------

--
-- Tábla szerkezet ehhez a táblához `accident_causes`
--

CREATE TABLE `accident_causes` (
  `cause_id` int(11) NOT NULL,
  `cause_description` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

--
-- A tábla adatainak kiíratása `accident_causes`
--

INSERT INTO `accident_causes` (`cause_id`, `cause_description`) VALUES
(1, 'Speeding'),
(2, 'Distracted driving'),
(3, 'Alcohol consumption');

-- --------------------------------------------------------

--
-- Tábla szerkezet ehhez a táblához `dates`
--

CREATE TABLE `dates` (
  `date_id` int(11) NOT NULL,
  `accident_date` date NOT NULL,
  `year` int(11) NOT NULL,
  `month` int(11) NOT NULL,
  `day` int(11) NOT NULL,
  `day_of_week` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

--
-- A tábla adatainak kiíratása `dates`
--

INSERT INTO `dates` (`date_id`, `accident_date`, `year`, `month`, `day`, `day_of_week`) VALUES
(1, '2024-03-01', 2024, 3, 1, 'Friday'),
(2, '2024-03-02', 2024, 3, 2, 'Saturday'),
(3, '2024-03-02', 2024, 3, 2, 'Saturday'),
(4, '2024-03-01', 2024, 3, 1, 'Friday'),
(5, '2024-03-02', 2024, 3, 2, 'Saturday'),
(6, '2024-03-02', 2024, 3, 2, 'Saturday');

-- --------------------------------------------------------

--
-- Tábla szerkezet ehhez a táblához `locations`
--

CREATE TABLE `locations` (
  `location_id` int(11) NOT NULL,
  `city` varchar(100) NOT NULL,
  `street` varchar(255) DEFAULT NULL,
  `latitude` decimal(9,6) DEFAULT NULL,
  `longitude` decimal(9,6) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

--
-- A tábla adatainak kiíratása `locations`
--

INSERT INTO `locations` (`location_id`, `city`, `street`, `latitude`, `longitude`) VALUES
(1, 'Budapest', 'Andrássy út', '47.497913', '19.040236'),
(2, 'Debrecen', 'Piac utca', '47.531605', '21.627312'),
(3, 'Szeged', 'Kossuth Lajos sugárút', '46.253000', '20.141425'),
(4, 'Budapest', 'Andrássy út', '47.497913', '19.040236'),
(5, 'Debrecen', 'Piac utca', '47.531605', '21.627312'),
(6, 'Szeged', 'Kossuth Lajos sugárút', '46.253000', '20.141425');

-- --------------------------------------------------------

--
-- Tábla szerkezet ehhez a táblához `traffic_accidents`
--

CREATE TABLE `traffic_accidents` (
  `accident_id` int(11) NOT NULL,
  `location_id` int(11) NOT NULL,
  `date_id` int(11) NOT NULL,
  `weather_id` int(11) NOT NULL,
  `vehicle_type_id` int(11) NOT NULL,
  `cause_id` int(11) NOT NULL,
  `severity` varchar(50) NOT NULL,
  `num_casualties` int(11) NOT NULL,
  `num_vehicles` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

--
-- A tábla adatainak kiíratása `traffic_accidents`
--

INSERT INTO `traffic_accidents` (`accident_id`, `location_id`, `date_id`, `weather_id`, `vehicle_type_id`, `cause_id`, `severity`, `num_casualties`, `num_vehicles`) VALUES
(1, 1, 1, 1, 1, 1, 'High', 2, 2),
(2, 2, 2, 2, 2, 2, 'Medium', 1, 2),
(3, 3, 2, 3, 2, 3, 'Low', 0, 1);

-- --------------------------------------------------------

--
-- Tábla szerkezet ehhez a táblához `vehicle_types`
--

CREATE TABLE `vehicle_types` (
  `vehicle_type_id` int(11) NOT NULL,
  `type_name` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

--
-- A tábla adatainak kiíratása `vehicle_types`
--

INSERT INTO `vehicle_types` (`vehicle_type_id`, `type_name`) VALUES
(1, 'Car'),
(2, 'Motorcycle'),
(3, 'Bicycle'),
(4, 'Truck');

-- --------------------------------------------------------

--
-- Tábla szerkezet ehhez a táblához `weather_conditions`
--

CREATE TABLE `weather_conditions` (
  `weather_id` int(11) NOT NULL,
  `weather_condition` varchar(100) NOT NULL,
  `temperature` decimal(5,2) DEFAULT NULL,
  `precipitation` decimal(5,2) DEFAULT NULL,
  `visibility` decimal(5,2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

--
-- A tábla adatainak kiíratása `weather_conditions`
--

INSERT INTO `weather_conditions` (`weather_id`, `weather_condition`, `temperature`, `precipitation`, `visibility`) VALUES
(1, 'Clear', '15.50', '0.00', '10.00'),
(2, 'Rainy', '9.20', '5.60', '4.50'),
(3, 'Foggy', '6.00', '0.20', '1.00');

--
-- Indexek a kiírt táblákhoz
--

--
-- A tábla indexei `accident_causes`
--
ALTER TABLE `accident_causes`
  ADD PRIMARY KEY (`cause_id`);

--
-- A tábla indexei `dates`
--
ALTER TABLE `dates`
  ADD PRIMARY KEY (`date_id`);

--
-- A tábla indexei `locations`
--
ALTER TABLE `locations`
  ADD PRIMARY KEY (`location_id`);

--
-- A tábla indexei `traffic_accidents`
--
ALTER TABLE `traffic_accidents`
  ADD PRIMARY KEY (`accident_id`),
  ADD KEY `location_id` (`location_id`),
  ADD KEY `date_id` (`date_id`),
  ADD KEY `weather_id` (`weather_id`),
  ADD KEY `vehicle_type_id` (`vehicle_type_id`),
  ADD KEY `cause_id` (`cause_id`);

--
-- A tábla indexei `vehicle_types`
--
ALTER TABLE `vehicle_types`
  ADD PRIMARY KEY (`vehicle_type_id`);

--
-- A tábla indexei `weather_conditions`
--
ALTER TABLE `weather_conditions`
  ADD PRIMARY KEY (`weather_id`);

--
-- A kiírt táblák AUTO_INCREMENT értéke
--

--
-- AUTO_INCREMENT a táblához `accident_causes`
--
ALTER TABLE `accident_causes`
  MODIFY `cause_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;

--
-- AUTO_INCREMENT a táblához `dates`
--
ALTER TABLE `dates`
  MODIFY `date_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7;

--
-- AUTO_INCREMENT a táblához `locations`
--
ALTER TABLE `locations`
  MODIFY `location_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7;

--
-- AUTO_INCREMENT a táblához `traffic_accidents`
--
ALTER TABLE `traffic_accidents`
  MODIFY `accident_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;

--
-- AUTO_INCREMENT a táblához `vehicle_types`
--
ALTER TABLE `vehicle_types`
  MODIFY `vehicle_type_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;

--
-- AUTO_INCREMENT a táblához `weather_conditions`
--
ALTER TABLE `weather_conditions`
  MODIFY `weather_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;

--
-- Megkötések a kiírt táblákhoz
--

--
-- Megkötések a táblához `traffic_accidents`
--
ALTER TABLE `traffic_accidents`
  ADD CONSTRAINT `traffic_accidents_ibfk_1` FOREIGN KEY (`location_id`) REFERENCES `locations` (`location_id`),
  ADD CONSTRAINT `traffic_accidents_ibfk_2` FOREIGN KEY (`date_id`) REFERENCES `dates` (`date_id`),
  ADD CONSTRAINT `traffic_accidents_ibfk_3` FOREIGN KEY (`weather_id`) REFERENCES `weather_conditions` (`weather_id`),
  ADD CONSTRAINT `traffic_accidents_ibfk_4` FOREIGN KEY (`vehicle_type_id`) REFERENCES `vehicle_types` (`vehicle_type_id`),
  ADD CONSTRAINT `traffic_accidents_ibfk_5` FOREIGN KEY (`cause_id`) REFERENCES `accident_causes` (`cause_id`);
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;









Nincsenek megjegyzések:

Megjegyzés küldése

Norvég feladat

A feladathoz szükséges képek, minta és adatbázis elérhetősége: https://github.com/latiza/norv-gfeladat/