Доброго времени суток!
Навеяно этой темой.
Посмотрел реализацию от @Pax Beach (за что ему спасибо большое) и столкнулся с тем что TRESTClient со всеми потрахами это просто дикий ужас.
Решил собрать аналогичный пример, только не использовать TREST***
немного опишу, свою реализацию
uAppSettings.pas - хранит описание вашего приложения созданного в ВК
FMX.RESTLight.pas - модуль "общения" клиента с сервером
FMX.RESTLight.Types.pas - тут хранятся типы для работы TRESTLight
Приведу код, который постит Вам на стену текст
var
aFields: TArray<TmyRestParam>;
aJSON: string;
begin
SetLength(aFields, 5);
aFields[0] := TmyRestParam.Create('access_token', FAuthToken.token, false);
aFields[1] := TmyRestParam.Create('v', FVKApp.APIVersion, false);
aFields[2] := TmyRestParam.Create('owner_id', FAuthToken.user_id, false);
aFields[3] := TmyRestParam.Create('friends_only', '0', false);
aFields[4] := TmyRestParam.Create('message', 'Тестовое сообщение <RESTLight>', false);
TTask.Run(
procedure
begin
aJSON := TRESTLight.Execute('wall.post', FVKApp, aFields);
TThread.Synchronize(TThread.CurrentThread,
procedure
begin
Memo1.Lines.Add('---- wall.post ----');
Memo1.Lines.Add(aJSON);
end);
end);
а вот так можно заливать файлы
var
aFields: TArray<TmyRestParam>;
aJSON: string;
begin
SetLength(aFields, 4);
aFields[0] := TmyRestParam.Create('access_token', FAuthToken.token, false);
aFields[1] := TmyRestParam.Create('v', FVKApp.APIVersion, false);
aFields[2] := TmyRestParam.Create('owner_id', FAuthToken.user_id, false);
aFields[3] := TmyRestParam.Create('photo', aUploadFile, true); // для файлов указывается !!!true!!!
TTask.Run(
procedure
begin
// для загрузки файлов использовать TRESTLight.Execute2, в нем можно указать произвольный URL
aJSON := TRESTLight.Execute2(aUploadURL, FVKApp, aFields);
TThread.Synchronize(TThread.CurrentThread,
procedure
begin
Memo1.Lines.Add('---- upload file to server ----');
Memo1.Lines.Add(aJSON);
end);
end);
P.S. На правильность и оригинальность не претендую, просто альтернативный вариант. Мне например не понравилась как устроен TRESTClient, много компонентов лишних. В боевых условиях наверное код еще будет модернизироваться, я рассмотрел только пару методов, но думаю общая концепция не сильно поменяется
GitHub TRESTLight.zip