Перейти к содержанию
Fire Monkey от А до Я
  • 0

TRESTLight - облегченная версия


Равиль Зарипов (ZuBy)

Вопрос

  • Модераторы

Доброго времени суток!

Навеяно этой темой.

Посмотрел реализацию от @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

Изменено пользователем ZuBy
Ссылка на комментарий

Рекомендуемые сообщения

  • 0
7 часов назад, ZuBy сказал:

P.S. На правильность и оригинальность не претендую, просто альтернативный вариант. Мне например не понравилась как устроен TRESTClient, много компонентов лишних. В боевых условиях наверное код еще будет модернизироваться, я рассмотрел только пару методов, но думаю общая концепция не сильно поменяется

Интересно изучить в качестве альтернативного взгляда на проблему. Спасибо!

Но сам буду пользоваться стандартной тяжелой и кривой конструкцией TRestClient-Request-Response.

Потому что самое сложное в интеграции с API — это не методы вызвать и ответы от них обработать. Самый сок — настроить приложения в соцсетях, выпустить фингерпринты для iOS-Android-Win, обосновать техподдержке соцсети нужность и полезность для пользователей вашего приложения, поддерживать минимальное количество ошибок вызовов API, корректность публикуемого содержания и соответствия нормам каждой соцсети, делать это для каждой соцсети VK-FB-Insta-OK-G+, иметь возможность повысить версию RAD Studio и не уронить все эти приложения (15 штук + web-реализации).

После этого, использовать компоненты и модули, которые скорее всего не будут сопровождаться через 1-2 года что-то не хочется )

 

Ссылка на комментарий
  • 0
  • Модераторы
47 минут назад, Pax Beach сказал:

Самый сок — настроить приложения в соцсетях, выпустить фингерпринты для iOS-Android-Win, обосновать техподдержке соцсети нужность и полезность для пользователей вашего приложения, поддерживать минимальное количество ошибок вызовов API, корректность публикуемого содержания и соответствия нормам каждой соцсети, делать это для каждой соцсети VK-FB-Insta-OK-G+, иметь возможность повысить версию RAD Studio и не уронить все эти приложения (15 штук + web-реализации).

После этого, использовать компоненты и модули, которые скорее всего не будут сопровождаться через 1-2 года что-то не хочется )

 

может я что-то не понимаю, но это никак не относится к TRESTClient. оно из коробки ничего не умеет, это такие же вызовы POST/GET просто обвешанные типами, классами, компонентами, зависимостями. Т.к. стандартов для протокола REST не существует, каждая соц сеть делает так как удобно.

на счёт сопровождения, тут и думать нечего: если загнется TNetHTTPClient, то и TRESTClient упадёт. И не используйте уже IdHTTP, он устарел и косячит на HTTPS

Ссылка на комментарий
  • 0
1 минуту назад, ZuBy сказал:

на счёт сопровождения, тут и думать нечего: если загнется TNetHTTPClient, то и TRESTClient упадёт. И не используйте уже IdHTTP, он устарел и косячит на HTTPS

Тут я согласен, спасибо за подсказку.

Просто хотел сказать о том, что зачастую хочется использовать практики, которые работают, просто отлаживаются, легко обновляются/сопровождаются. Потому что много не менее важных и трудоемких дел вокруг разработки — дизайн, тестирование, продакшн, развитие, маркетинг, маркетинг, маркетинг )

 

 

Ссылка на комментарий
  • 0
  • Модераторы
3 минуты назад, Pax Beach сказал:

Тут я согласен, спасибо за подсказку.

Просто хотел сказать о том, что зачастую хочется использовать практики, которые работают, просто отлаживаются, легко обновляются/сопровождаются. 

вот тут вы ошиблись) я час убил разбираясь в потрохах TREST***, там ничего не делается просто)

Если хотите просто отлаживать и сопровождать, напишите подобный модуль и забудьте про TRESTClient.

P.S. Если вы занимаетесь апи для FB, покажите реализацию? я попробую сделать аналог на TRESTLight

Ссылка на комментарий
  • 0
1 час назад, ZuBy сказал:

вот тут вы ошиблись) я час убил разбираясь в потрохах TREST***, там ничего не делается просто)

Если хотите просто отлаживать и сопровождать, напишите подобный модуль и забудьте про TRESTClient.

P.S. Если вы занимаетесь апи для FB, покажите реализацию? я попробую сделать аналог на TRESTLight

Нет времени для этого раньше понедельника. Как сделаю, выложу, конечно в соседней теме.

Ссылка на комментарий
  • 0
  • Модераторы

думаю можно.

при получении токена там еще отдается время до которого будет валиден токен.

пока этот токен валиден, его можно указывать в апи, как только время прошло нужно снова запросить

Ссылка на комментарий
  • 0
32 минуты назад, ZuBy сказал:

думаю можно.

при получении токена там еще отдается время до которого будет валиден токен.

пока этот токен валиден, его можно указывать в апи, как только время прошло нужно снова запросить

скажите пожалуйста, а это сообщение внизу окна авторизации "This window will close automatically when a token could be detected and extracted."  принадлежит MS Internet Browser?

Можно как-то кастомизировать окно авторизации?

Ссылка на комментарий
  • 0
  • Модераторы

да, это от IE, кастомизировать нельзя его и не нужно, даже если возможно. Иначе будет недоверие пользователей к стандартному способу авторизации через OAuth

Ссылка на комментарий
  • 0
12 минут назад, ZuBy сказал:

да, это от IE, кастомизировать нельзя его и не нужно, даже если возможно. Иначе будет недоверие пользователей к стандартному способу авторизации через OAuth

спасибо.

а еще один вопрос можно?

у вас в исходнике есть такое:

class function TmyVKApp.APIVersion: string;
begin
  Result := '5.53';
end;

это нужно менять со временем и влияет ли это на что-то?

Ссылка на комментарий
  • 0
  • Модераторы
Только что, Steepe_Hare сказал:

спасибо.

а еще один вопрос можно?

у вас в исходнике есть такое:


class function TmyVKApp.APIVersion: string;
begin
  Result := '5.53';
end;

это нужно менять со временем и влияет ли это на что-то?

это версия ВК апи, поменяете если какой-то метод просит более новую версию

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...