How to best best structure larger microservices in Plumber - part 2

May 9, 2019 @konradino Konrad Semsch

@konradino wrote:

@Blair09M - the previous topic (link) was closed and I just briefly wanted to follow-up on the dynamic routes and parameters logic. I tried your solution but I'm getting a weird error:

Starting server to listen on port 5644
Error in if (type == "bool" || type == "logical") { : 
  missing value where TRUE/FALSE needed

I tried exactly your solution from before and that is the full code:

#* Check API readiness
#* @get /healthcheck
function(res) {
  res$status <- 200
  return("Give some data, I'm ready to predict")

#* Make a prediction for selected country
#* @param country Select model country code
#* @param check_it Should it be checked?
#* @post /<country>/predict
#* @serializer unboxedJSON
function(req, res, country, check_it = FALSE) {
    if (check_it == FALSE){
      checked <- "no"
    } else {
      checked <- "yes"
    if (country == "au"){
      country <- "selected_au"
    } else if (country == "nl"){
      country <- "selected_nl"
    } else {
      stop("Invalid country parameters. Currently supported countries are: au and nl")
    res$body <- list(

Now, based on some online resources if I change the host to:

#* @post /<country::string>/predict

the API is able to start and swagger automatically generates such URL:

curl -X POST "{country}/predict?check_it=TRUE&country=nl" -H  "accept: application/json"

which I find confusing because I though that country wouldn't need to be specified after '?' similarly to 'check_it' if it's part of the host. The API returns 404. What's your view on that?

Posts: 3

Participants: 1

Read full topic

Previous Article
R on Docker memory issue
R on Docker memory issue

@ajeeva wrote: Hi I am trying to run an RScript on rocker/ropensci container to ...

Next Article
RQuantLib failed to deploy
RQuantLib failed to deploy

@pak wrote: Hello, I failed to deploy the RQuantLib package. Could you give me a...