Каков хороший способ предоставить простой в использовании интерфейс в стиле объекта для HTTP API, при этом позволяя выполнять асинхронные HTTP-запросы? Например, учитывая следующий код:
user = User.find(1) # /api/v1/users/1
f = user.foo # /api/v1/users/1/foo
b = user.bar # /api/v1/users/1/bar
Вызовы методов foo
и bar
могут логически вызываться параллельно, но, если возможно, я бы хотел, чтобы вызывающий пользователь имел чистый способ объявить свое намерение для параллельных вызовов, не вдаваясь в детали базовая HTTP-библиотека.
Я не думаю, что невидимая автоматизация распараллеливания является хорошей идеей, так что вызывающий код явно говорит о своих ожиданиях. Но я думаю, что что-то вроде следующего синтаксиса блока может быть чрезвычайно полезным для разработчиков, которые могут использовать интерфейс, когда они знают, что набор запросов не зависит друг от друга.
# possible implementation?
user = User.find(1)
User.parallel do
f = user.foo
b = user.bar
end
Возможно ли это? Как я могу сделать это, используя Ruby 1.9.2?