Cześć. Jeśli piszę bez ładu to przepraszam, ale siedzę nad tym już kilka godzin i nie mam już pomysłu z której strony to ugryźć (chociaż czuję, że rozwiązanie jest banalne). W dużym skrócie - wykładowca ma własny system do sprawdzania projektów API (ten jest do zarządzania budżetem), dane zwracane w postaci JSON, głównie przy metodach GET (testowany na wiele sposobów i nigdy nie było z nim problemów, więc to chyba w moim kodzie jest błąd). Jednym z zadań jest napisanie metody PUT według tego opisu:
"PUT /api/categories/{id}/ - dokonuje całkowitej aktualizacji kategorii. Jeżeli nie ma kategorii o podanym id, zwróć kod 404 Not Found. W przeciwnym przypadku dokonaj takiej samej weryfikacji jak przy metodzie POST (z tymi samymi kodami błędów). Jeżeli wszystkie dane zostały podane, zaktualizuj rekord w bazie danych i zwróć kod 204 No Content."
Połączenie z bazą danych działa bez zarzutu, poprzednie zadania z GET, POST, DELETE nie wywołały błędów (w sensie testy wyszły pozytywnie i obsłużono 100% danych). Tym razem system podał informację zwrotną:
Wykonano zapytanie PUT /api/categories/9/ z poprawnymi danymi.
Odpowiedź powinna być oznaczona kodem 204. Zamiast tego zwrócono 400.
{"error":"Bad Request"}
Wykonano zapytanie PUT /api/categories/{id}/ z powtórzonym name.
Odpowiedź powinna być oznaczona kodem 409. Zamiast tego zwrócono 400.
{"error":"Bad Request"}
Testy PUT /api/categories/{id}/ zakończono. Uzyskano skuteczność: 67%
Baza danych:
CREATE DATABASE IF NOT EXISTS exampledb;
USE exampledb;
CREATE TABLE IF NOT EXISTS categories (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
color VARCHAR(7) NOT NULL
);
CREATE TABLE IF NOT EXISTS transactions (
id INT AUTO_INCREMENT PRIMARY KEY,
cat_id INT NOT NULL,
name VARCHAR(100) NOT NULL,
amount FLOAT NOT NULL,
date DATE NOT NULL,
CONSTRAINT fk_cat FOREIGN KEY (cat_id) REFERENCES categories(id) ON DELETE CASCADE
);
Metoda POST i PUT (POST działa, PUT w 67%):
Kod do metod POST i PUT
Byłbym wdzięczny za jakieś wskazówki, pomysły co może powodować takie informacje zwrotne. Wydaje mi się, że w metodzie PUT dane są poprawnie weryfikowane, jednak nadal zwracają nieodpowiednie info. Nie jestem w stanie powiedzieć na jakich konkretnie danych jest testowany ten kod.