Search code examples
pythonrapiplumber

How to send API response without body using Plumber?


Is it possible to send API response without body using Plumber? Here is what I tried:

#* @param msg The message to echo back.
#* @get /echo
function(msg="", res){
  res$body<-NULL
}

and

#* @param msg The message to echo back.
#* @get /echo
function(msg="", res){
 
}

But in both cases in Postman, I end up with {} with either pretty or raw view. It looks like empty body to me, but how can I get rid of {} as well?

Update I was able to achieve this result with python:

import flask
app = flask.Flask(__name__)
app.config["DEBUG"] = True
@app.route('/', methods=['GET'])
def home():
    return "", 200

app.run()

Now, how can I do the same with Plumber?

Another update

I am almost there:

#* @serializer contentType list(type="application/json")
#* @param msg The message to echo back.
#* @get /echo
function(msg="", res){
  
}

Returns no body, success! But I would also like to return status code = 202 (accepted). So I tried:

#* @serializer contentType list(type="application/json")
#* @param msg The message to echo back.
#* @get /echo
function(msg="", res){
  res$status <- 202
}

This almost works, but returns in the body some symbol: �

Now I need to get rid of it as well and keep status code 202


Solution

  • By default plumber is trying to send a valid JSON response. If that's not what you want, change the serialize to something like text and return an empty string

    #* @param msg The message to echo back.
    #* @get /echo
    #* @serializer text
    function(msg="", res){
      res$body <- ""
    }