В данной статье мы рассмотрим, как устранить проблемы, возникающие при работе с REST-клиентом в Delphi 12.2, используя метод updateInsertFirma14. Мы также рассмотрим возможные причины ошибок и предложим решения, чтобы успешно выполнять POST-запросы к серверу.
Введение
Ваша задача заключается в создании REST-клиента для работы с методом updateInsertFirma14 на сервере, который использует Unidac и PostgreSQL. В процессе работы вы столкнулись с ошибкой:
["error": "TServerMethods1.updateInsertFirma14 method not found in the server method list"]
Эта ошибка указывает на то, что метод updateInsertFirma14 не был найден на сервере. Давайте разберем возможные причины и способы их устранения.
Проверка серверной стороны
Сначала проверим, правильно ли определен метод updateInsertFirma14 на сервере. Вот пример кода серверной стороны:
function TServerMethods1.updateInsertFirma14(const AJSON: string): String;
var
LJSON: TJSONObject;
JSONValue: TJSONValue;
UniQuery1: TUniQuery;
ResultJSON: TJSONObject;
Firstname, Lastname: string;
begin
ResultJSON := TJSONObject.Create;
LJSON := nil;
UniQuery1 := nil;
try
// JSON string'ini parse et
JSONValue := TJSONObject.ParseJSONValue(AJSON);
if JSONValue is TJSONObject then
LJSON := JSONValue as TJSONObject
else
raise Exception.Create('Geçerli bir JSON nesnesi bulunamadı.');
// JSON verisi boş değilse işleme devam et
if not Assigned(LJSON) then
raise Exception.Create('Invalid JSON format.');
// Veritabanı Bağlantısını Kontrol Et
if not UniConnection1.Connected then
raise Exception.Create('Database connection is not open.');
// JSON'dan firstname ve lastname değerlerini al
Firstname := LJSON.GetValue('firstname', '');
Lastname := LJSON.GetValue('lastname', '');
// Eğer firstname veya lastname boşsa hata oluştur
if (Firstname = '') or (Lastname = '') then
raise Exception.Create('Firstname or Lastname is missing in the JSON data.');
// Query Oluşturma
UniQuery1 := TUniQuery.Create(nil);
try
UniQuery1.Connection := UniConnection1;
UniQuery1.SQL.Text := 'INSERT INTO Firma (firstname, lastname) VALUES (:firstname, :lastname)';
UniQuery1.Params.ParamByName('firstname').AsString := Firstname;
UniQuery1.Params.ParamByName('lastname').AsString := Lastname;
UniQuery1.ExecSQL;
// Başarılı işlem sonucu
ResultJSON.AddPair('status', 'success');
ResultJSON.AddPair('message', 'Firma kaydedildi.');
ResultJSON.AddPair('result', TJSONNumber.Create(1));
Result := ResultJSON.ToString;
finally
FreeAndNil(UniQuery1);
end;
except
on E: Exception do
begin
ResultJSON.AddPair('status', 'error');
ResultJSON.AddPair('message', E.Message);
ResultJSON.AddPair('result', TJSONNumber.Create(0));
Result := ResultJSON.ToString;
end;
end;
FreeAndNil(LJSON);
FreeAndNil(ResultJSON);
end;
Проверка настройки REST-сервера
Убедитесь, что метод updateInsertFirma14 действительно определен на сервере. В Delphi 12.2 для настройки REST-сервера используется компонент TDSServerClass. Убедитесь, что метод updateInsertFirma14 добавлен в этот компонент.
Теперь проверим настройки клиента. Убедитесь, что вы правильно указали URL и ресурс для запроса. Вот пример кода клиента:
procedure TForm1.Button8Click(Sender: TObject);
var
LJSON: TJSONObject;
RESTClient: TRESTClient;
RESTRequest: TRESTRequest;
RESTResponse: TRESTResponse;
begin
if Edit1.Text.Trim = '' then
begin
ShowMessage('Lütfen bir isim girin.');
Exit;
end;
if Edit2.Text.Trim = '' then
begin
ShowMessage('Lütfen bir soyisim girin.');
Exit;
end;
LJSON := TJSONObject.Create;
try
LJSON.AddPair('firstname', Edit1.Text.Trim);
LJSON.AddPair('lastname', Edit2.Text.Trim);
RESTClient := TRESTClient.Create('http://192.168.1.35:8080/datasnap/rest');
RESTRequest := TRESTRequest.Create(nil);
RESTResponse := TRESTResponse.Create(nil);
try
RESTRequest.Client := RESTClient;
RESTRequest.Response := RESTResponse;
RESTRequest.Resource := 'TServerMethods1/updateInsertFirma14';
RESTRequest.Method := TRESTRequestMethod.rmPOST;
RESTRequest.AddBody(LJSON.ToString, ContentTypeFromString('application/json'));
RESTRequest.Execute;
if RESTResponse.StatusCode = 200 then
begin
ShowMessage('Kayıt başarıyla eklendi.');
Memo2.Lines.Add('Yanıt: ' + RESTResponse.Content);
end
else
begin
ShowMessage('Hata: ' + RESTResponse.StatusText);
end;
except
on E: Exception do
ShowMessage('Hata oluştu: ' + E.Message);
end;
finally
LJSON.Free;
RESTClient.Free;
RESTRequest.Free;
RESTResponse.Free;
end;
end;
Возможные причины ошибки
Неправильное имя метода: Убедитесь, что имя метода в клиенте совпадает с именем метода на сервере. В вашем случае метод называется updateInsertFirma14, а не InsertFirma14.
Отсутствие метода в списке методов сервера: Убедитесь, что метод updateInsertFirma14 действительно определен и добавлен в список методов сервера.
Неправильный URL: Убедитесь, что вы правильно указали URL и порт сервера. В вашем случае URL выглядит так: http://192.168.1.35:8080/datasnap/rest.
Неправильный тип запроса: Убедитесь, что вы используете метод rmPOST, а не rmGET.
Неправильный формат JSON: Убедитесь, что вы правильно формируете JSON-объект и что он корректен.
Альтернативное решение
Если проблема не решена, можно попробовать использовать библиотеку MARS-Curiosity для работы с REST-сервером. Библиотека MARS-Curiosity предоставляет более удобный и гибкий интерфейс для работы с REST-серверами.
Заключение
В данной статье мы рассмотрели возможные причины ошибки при работе с REST-клиентом в Delphi 12.2 и предложили решения для их устранения. Убедитесь, что вы правильно настроили как серверную, так и клиентскую части вашего приложения. Если проблема не решена, можно попробовать использовать библиотеку MARS-Curiosity для более удобной работы с REST-серверами.
Надеюсь, эта статья поможет вам успешно наладить работу с методом updateInsertFirma14 в вашем приложении на Delphi 12.2.
Контекст статьи — решение ошибок при работе с методом updateInsertFirma14 в REST-клиенте Delphi 12.2, включающее проверку настроек сервера и клиента, правильность метода, URL и JSON-формата.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.