Skip to content

Instantly share code, notes, and snippets.

@chenglou
Last active July 18, 2021 12:13
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chenglou/251ba7e6aa7c86c6ffdb301f420e934d to your computer and use it in GitHub Desktop.
Save chenglou/251ba7e6aa7c86c6ffdb301f420e934d to your computer and use it in GitHub Desktop.
Recommended way to do HTTP requests in ReScript
// bindings can be isolated/upstreamed. I'm inlining it just for the example
type request;
type response;
[@bs.new] external makeXMLHttpRequest: unit => request = "XMLHttpRequest";
[@bs.send] external addEventListener: (request, string, unit => unit) => unit = "addEventListener";
[@bs.get] external response: request => response = "response";
[@bs.send] external open_: (request, string, string) => unit = "open";
[@bs.send] external send: request => unit = "send";
[@bs.send] external abort: request => unit = "abort";
// =========
// shape of your response
[@bs.scope "JSON"] [@bs.val]
external parseResponse: response => {. "message": array(string)} = "parse";
let request = makeXMLHttpRequest();
request->addEventListener("load", () => {
let response = request->response->parseResponse;
Js.log(response##message)
});
request->addEventListener("error", () => {
Js.log("Error logging here")
});
request->open_("GET", "https://dog.ceo/api/breeds/image/random/3");
request->send;
// bindings can be isolated/upstreamed. I'm inlining it just for the example
type request
type response
@bs.new external makeXMLHttpRequest: unit => request = "XMLHttpRequest"
@bs.send external addEventListener: (request, string, unit => unit) => unit = "addEventListener"
@bs.get external response: request => response = "response"
@bs.send external open_: (request, string, string) => unit = "open"
@bs.send external send: request => unit = "send"
@bs.send external abort: request => unit = "abort"
// =========
// shape of your response
@bs.scope("JSON") @bs.val
external parseResponse: response => {"message": array<string>} = "parse"
let request = makeXMLHttpRequest()
request->addEventListener("load", () => {
let response = request->response->parseResponse
Js.log(response["message"])
})
request->addEventListener("error", () => {
Js.log("Error logging here")
})
request->open_("GET", "https://dog.ceo/api/breeds/image/random/3")
request->send
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment