{"id":18005440,"url":"https://github.com/anuragsoni/http_async","last_synced_at":"2025-03-26T10:32:06.349Z","repository":{"id":42395858,"uuid":"239373064","full_name":"anuragsoni/http_async","owner":"anuragsoni","description":"Asynchronous HTTP 1.1 server for OCaml","archived":false,"fork":false,"pushed_at":"2022-11-11T18:16:21.000Z","size":3953,"stargazers_count":15,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-17T14:52:43.091Z","etag":null,"topics":["async","http","http-server","http11","ocaml","server"],"latest_commit_sha":null,"homepage":"https://anuragsoni.github.io/http_async/","language":"OCaml","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/anuragsoni.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-02-09T20:56:47.000Z","updated_at":"2024-12-10T13:46:14.000Z","dependencies_parsed_at":"2023-01-21T15:00:53.288Z","dependency_job_id":null,"html_url":"https://github.com/anuragsoni/http_async","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anuragsoni%2Fhttp_async","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anuragsoni%2Fhttp_async/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anuragsoni%2Fhttp_async/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anuragsoni%2Fhttp_async/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anuragsoni","download_url":"https://codeload.github.com/anuragsoni/http_async/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245637074,"owners_count":20648089,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["async","http","http-server","http11","ocaml","server"],"created_at":"2024-10-30T00:19:47.034Z","updated_at":"2025-03-26T10:32:06.044Z","avatar_url":"https://github.com/anuragsoni.png","language":"OCaml","readme":"# Http_async\n\nHTTP 1.1 server for async applications.\n\n### Installation\n\n###### To use the version published on opam:\n\n```\nopam install http_async\n```\n\n###### For the development version:\n\n```\nopam pin add http_async.dev git+https://github.com/anuragsoni/http_async.git\n```\n\n### Hello World\n\n```ocaml\nopen! Core\nopen! Async\nopen Http_async\n\nlet () =\n  Command_unix.run\n    (Server.run_command ~summary:\"Hello world HTTP Server\" (fun addr (request, _body) -\u003e\n       Log.Global.info\n         \"(%s): %s\"\n         (Socket.Address.Inet.to_string addr)\n         (Request.path request);\n       return (Response.create `Ok, Body.Writer.string \"Hello World\")))\n;;\n```\n\n### Routing?\n\nHttp_async doesn't ship with a router. There are multiple routing libraries available on opam and using `Http_async` with them should be fairly easy. As an example, integration with [ocaml-dispatch](https://github.com/inhabitedtype/ocaml-dispatch) can be done as so:\n\n```ocaml\nopen! Core\nopen! Async\nopen Http_async\n\nlet routes =\n  let open Dispatch in\n  DSL.create\n    [ ( \"/hello/:name\"\n      , fun params _rest -\u003e\n          let name = List.Assoc.find_exn params ~equal:String.equal \"name\" in\n          return (Response.create `Ok, Body.Writer.string (sprintf \"Hello, %s\" name)) )\n    ; (\"/\", fun _params _rest -\u003e Response.create `Ok, Body.Writer.string \"Hello World\")\n    ]\n;;\n\nlet service _addr (request, body) =\n  let path = Request.path request in\n  match Dispatch.dispatch routes path with\n  | Some response -\u003e response\n  | None -\u003e return (Response.create `Not_found, Body.Writer.string \"Route not found\")\n;;\n\nlet () = Command_unix.run (Server.run_command ~summary:\"Hello world HTTP Server\" service)\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanuragsoni%2Fhttp_async","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanuragsoni%2Fhttp_async","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanuragsoni%2Fhttp_async/lists"}