Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Moscow Julia Meetup #1 - Julia and Web

Moscow Julia Meetup #1 - Julia and Web

Quick review of Julia language tools for web. Presented by Vladimir Filonov at Moscow Julia Meetup #1.

Avatar for Gleb Ivashkevich

Gleb Ivashkevich

April 26, 2019
Tweet

More Decks by Gleb Ivashkevich

Other Decks in Programming

Transcript

  1. whoami - Разрабатываю нагруженные и не очень системы. В основном

    Python и Erlang/Elixir - Преподаю Python в LearnPython и OTUS - Экспериментирую с новыми технологиями и языками
  2. Http.jl Http Клиент - GET -> HTTP.get POST -> HTTP.post

    - Cookies - Встроенный retry HTTP.get("http://julialang.org", retries=3)
  3. Http.jl Http Клиент - Встроенная поддержка AWS - Поддержка стриминга

    в обе стороны HTTP.open("POST", "http://httpbin.org/post") do io write(io, data_chunk) end
  4. Http.jl Http Клиент - Встроенная поддержка AWS - Поддержка стриминга

    в обе стороны HTTP.open("POST", "http://httpbin.org/post") do io write(io, data_chunk) end HTTP.open("GET", "https://tinyurl.com/bach-cello-suite-1-ogg") do http open(`vlc -q --play-and-exit --intf dummy -`, "w") do vlc write(vlc, http) еnd end
  5. Http.jl Http Сервер - Поддержка SSL - Встроенная защита от

    DoS rate_limit::Rational{Int}=nothing, number of connections//second allowed per client IP address; excess connections are immediately closed. e.g. 5//1.
  6. Http.jl Http Сервер - Поддержка SSL - Встроенная защита от

    DoS rate_limit::Rational{Int}=nothing, number of connections//second allowed per client IP address; excess connections are immediately closed. e.g. 5//1. - Роутинг запросов const CRUD_ROUTER = HTTP.Router() HTTP.@register(CRUD_ROUTER, "POST", "/api/v1/objects", createObject) HTTP.@register(CRUD_ROUTER, "GET", "/api/v1/objects/*", getObject) HTTP.@register(CRUD_ROUTER, "PUT", "/api/v1/objects", updateObject) HTTP.@register(CRUD_ROUTER, "DELETE", "/api/v1/objects/*", deleteObject)
  7. Http.jl Pros - All-in-one - Хорошо развивается - Планируют стать

    частью stdlib Cons - Низкоуровнево - Нет встроенного парсера JSON
  8. Mux.jl - Надстройка над HTTP.jl - Позиционируется как middleware -

    Поддерживается “мультиплексирование” mux(todict, auth, catch_errors, app)
  9. Mux.jl @app test = ( Mux.defaults, page(respond("<h1>Hello World!</h1>")), page("/about", probabilty(

    0.1, respond("<h1>Boo!</h1>") ), respond("<h1>About Me</h1>") ), page("/user/:user", req -> "<h1>Hello, $(req[:params][:user])!</h1>" ), Mux.notfound() ) serve(test)
  10. Mux.jl Pros - Вся сила HTTP.jl - С сахаром Cons

    - В HTTP.jl есть своя поддержка middleware - Всё еще встроенного парсера JSON
  11. - Вдохновлён Phoenix framework (Elixir) - Но пока отнюдь не

    MVC - моделей нет, представления условные Bukdu.jl
  12. - Вдохновлён Phoenix framework (Elixir) - Но пока отнюдь не

    MVC - моделей нет, представления условные - В примерах - Documenter.jl для представления Bukdu.jl
  13. Bukdu.jl struct HelloController <: ApplicationController conn::Conn end hello(c::HelloController) = render(JSON,

    "Hello World") hello_user(c::HelloController) = render(JSON, "Hello " * c.params.user) routes() do get("/", HelloController, hello) get("/:user", HelloController, hello_user, :user => String) end
  14. Bukdu.jl Pros - Генератор форм - Встроенная сериализация JSON Cons

    - А вот десиарелизации JSON нет - С документацией не очень
  15. Genie.jl - Заявляется как полноценный MVC - Встроенный boilerplate -

    Свой шаблонизатор - Свой ORM SearchLight - Даже миграции поддерживает
  16. Genie.jl - Заявляется как полноценный MVC - Встроенный boilerplate -

    Свой шаблонизатор - Свой ORM SearchLight - Даже миграции поддерживает - Генерация и обработка форм
  17. Genie.jl Pros - Очень похож на MVC. Может почти всё

    - Наконец полноценная работа с JSON Cons - Сложный старт - С документацией, как и везде - не очень
  18. etc

  19. - JuliaWebAPI.jl - RPC over MQ/HTTP - RPC over -

    WebSockets.jl - Pages.jl Но всех их по сути поглотил HTTP.jl etc
  20. etc

  21. Резюме - Фреймворков не много, но они есть - Очень

    плохо с документацией - Нет бенчмарков
  22. Резюме - Фреймворков не много, но они есть - Очень

    плохо с документацией - Нет бенчмарков - Нет stand-alone шаблонизаторов
  23. Резюме - Фреймворков не много, но они есть - Очень

    плохо с документацией - Нет бенчмарков - Нет stand-alone шаблонизаторов - Нет stand-alone ORM
  24. Резюме - Фреймворков не много, но они есть - Очень

    плохо с документацией - Нет бенчмарков - Нет stand-alone шаблонизаторов - Нет stand-alone ORM - HTTP.jl - самое зрелое из всего