Size: a a a

Rust — русскоговорящее сообществo

2020 November 29

∅ч

∅ ч in Rust — русскоговорящее сообществo
∅ ч
impl Commit<Request, Response> for reqwest::Client {
  fn commit(&self, req: &Request) -> Response { ... }
}


хорошая практика для написания API?
просто структурки заполняем, отправляем их через client.commit

хотя мне кажется надо как-то функцию переименовать, а то проблему будут
источник

∅ч

∅ ч in Rust — русскоговорящее сообществo
хотя даже с проблемами получим что-то типа

Api1::commit(&client, &request);
Api2::commit(&client, &request;
источник

∅ч

∅ ч in Rust — русскоговорящее сообществo
В расте нельзя задавать кастомные имена для методов трейтов, чтобы типа

use somecrate::Trait{ commit as somecrate_commit }

?
источник

∅ч

∅ ч in Rust — русскоговорящее сообществo
Как вообще лучше всего спроектировать крейт для API по HTTP/REQWEST?
источник

∅ч

∅ ч in Rust — русскоговорящее сообществo
∅ ч
impl Commit<Request, Response> for reqwest::Client {
  fn commit(&self, req: &Request) -> Response { ... }
}


хорошая практика для написания API?
хотя спасибо богам, у нас же еще нет async fn а трейтах..
источник

∅ч

∅ ч in Rust — русскоговорящее сообществo
получается лайфтайм под футурку, ее приклею к Request и выведу в Future с этим же лайфтаймом?
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
∅ ч
хотя спасибо богам, у нас же еще нет async fn а трейтах..
Возвращай Pin<Box<dyn Future<Output=...>>>
По сравнению с HTTP запросом затраты на аллокацию и индирекцию довольно малы и терпимы
источник

∅ч

∅ ч in Rust — русскоговорящее сообществo
Mikail Bagishov
Возвращай Pin<Box<dyn Future<Output=...>>>
По сравнению с HTTP запросом затраты на аллокацию и индирекцию довольно малы и терпимы
Ну да, что-то типа такого.

А как лучше всего спроектировать еще работу с авторизацией?
источник

∅ч

∅ ч in Rust — русскоговорящее сообществo
В том API еще есть Bearer, я вот думаю как бы красиво сервайсклиент обернуть
источник

∅ч

∅ ч in Rust — русскоговорящее сообществo
CommitAuthorized куда еще засунуть String?
источник

∅ч

∅ ч in Rust — русскоговорящее сообществo
Или наверное даже

trait Request RequestAuthorized будет для формочек

trait Commit, CommitAuthorized для reqwest::Client

trait Commit, CommitAuthorized для User
источник

∅ч

∅ ч in Rust — русскоговорящее сообществo
просто получается какая-та сложная структура, но она должна 3 компонента поддерживать
источник

∅ч

∅ ч in Rust — русскоговорящее сообществo
Просто хочется что-то легко расширяемое и красивое, а не User, в который воткнули клиент от реквеста и прихерачили сотни методов в impl
источник

∅ч

∅ ч in Rust — русскоговорящее сообществo
Ну и использовать Cow в таких api-проектах норм?
источник

∅ч

∅ ч in Rust — русскоговорящее сообществo
Крута конечно, когда структуры запросов существуют независимо от переменных рядом, но кажется эта абстракция с Enum может быть не эффективна
источник

∅ч

∅ ч in Rust — русскоговорящее сообществo
∅ ч
Или наверное даже

trait Request RequestAuthorized будет для формочек

trait Commit, CommitAuthorized для reqwest::Client

trait Commit, CommitAuthorized для User
есть кстати похожие фреймворки?
источник

∅ч

∅ ч in Rust — русскоговорящее сообществo
∅ ч
есть кстати похожие фреймворки?
чтобы именно были готовые абстракции для создания API фронтенда
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
∅ ч
Просто хочется что-то легко расширяемое и красивое, а не User, в который воткнули клиент от реквеста и прихерачили сотни методов в impl
Ну я такой подход видел в официальной реализации swagger для раста
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
И другой подход, когда каждая пара запрос-ответ это отдельная пара структкр, которые вместе какой-то трейт реализуют, я видел в teloxide и paperclip
источник

∅ч

∅ ч in Rust — русскоговорящее сообществo
А в расте уже можно для внешних типов внешние трейты крепить?
источник