Title here
Summary here
Here’s the translation of the HTTP Server example from Go to R, formatted in Markdown for Hugo:
# Writing a basic HTTP server is easy using the 'httpuv' package.
library(httpuv)
# A fundamental concept in HTTP servers is handlers. In R, we can define
# handler functions that take a request and return a response.
hello <- function(req) {
# Functions serving as handlers take a request as an argument
# and return a list containing the response. Here our simple
# response is just "hello\n".
list(
status = 200,
headers = list(
'Content-Type' = 'text/plain'
),
body = "hello\n"
)
}
headers <- function(req) {
# This handler does something a little more sophisticated by
# reading all the HTTP request headers and echoing them into
# the response body.
body <- paste(names(req$HTTP_HEADERS), req$HTTP_HEADERS, sep = ": ", collapse = "\n")
list(
status = 200,
headers = list(
'Content-Type' = 'text/plain'
),
body = body
)
}
# We set up our server routes using a list of path-handler pairs.
router <- list(
'/hello' = hello,
'/headers' = headers
)
# Finally, we start the server with the port and our router.
runServer("0.0.0.0", 8090, list(
call = function(req) {
if (req$PATH_INFO %in% names(router)) {
return(router[[req$PATH_INFO]](req))
} else {
return(list(status = 404, headers = list(), body = "Not Found"))
}
}
))
To run the server:
# Run the script in R
Rscript http_server.R
Access the /hello
route:
$ curl localhost:8090/hello
hello
This R code uses the httpuv
package to create a simple HTTP server. The structure is similar to the original example, with handler functions for different routes. The main differences are:
httpuv
instead of net/http
.runServer
from httpuv
.Note that R doesn’t have built-in concurrency like Go, so this server will handle requests sequentially. For more complex applications, you might need to consider other packages or approaches for concurrent request handling in R.