mashery / iodocs

Interactive API documentation system
MIT License
1.89k stars 415 forks source link

HTTP POST/PUT params #3

Closed ami7ava closed 10 years ago

ami7ava commented 13 years ago

Is there any way parameters can be passed in the request body rather than the url for POST/PUT methods? Currently all params are sent via the url, even for POST/PUT.

mansilladev commented 13 years ago

In your use case, is your param list that you're POSTing in the request body live inside of a container? (e.g. JSON, JSON-RPC, etc.)

mansilladev commented 13 years ago

Damn that "Comment & Close" button. :)

ami7ava commented 13 years ago

The API (is a rails app) I was trying to use requires the following json as the request body -

{
   "post":{
      "title":"foo",
      "body":"bar"
   }
}

I tried to setup the parameters as -

   "parameters":[
      {
         "Name":"post[title]",
         "Required":"Y",
         "Default":"",
         "Type":"string",
         "Description":"Title"
      },
      {
         "Name":"post[body]",
         "Required":"Y",
         "Default":"",
         "Type":"string",
         "Description":"Body"
      }
   ]

and this is what I have noticed in the debug output -

{ httpMethod: 'POST',
  oauth: '',
  methodUri: '/posts.json',
  params: { post: { 'title]': 'foo', 'body]': 'bar' } },
  apiKey: '',
  apiSecret: 'undefined',
  apiName: 'SomeAPI' }
Unsecured Call
{ headers: { 'Content-Length': 0 },
  protocol: 'http',
  host: 'example.com',
  method: 'POST',
  path: '/posts.json?post=' }
  1. It tries to send the params in the url
  2. The format of the param names are not correct. Both title and body ends with a closing square bracket.
kmayoral commented 13 years ago

I get a similar issue when I try to access calls using the API tester for POST functions. PHP (well at least my version of 5.3) doesn't populate the global $_POST array with the parameters passed in the URL even though the HTTP method is POST. I have to resort to using $_GET or $_REQUEST arrays to make it work with the API tester. Perhaps if params were sent in the request body as abasak requests, this issue would be fixed as well.

adrianmott commented 13 years ago

I'd love to see this as well. I'm trying to setup a PUT method with our API and we require the updated fields to be in a JSON object in the request body (not as parameters in the URL).

Any update on this?

ezarko commented 13 years ago

I ran into the same issue, plus some others involving port numbers, https and API keys ... all when not using OAuth. Fixed in https://github.com/ezarko/iodocs/commit/35b39949674b4de7f5ecf0ada335122a2c5f6333. Pull request sent.

ppalavilli commented 12 years ago

has this been committed into the master ? looks like not.

Allblues commented 12 years ago

Is there a resolution to this issue? Can someone provide an example of how to include a param list in JSON in the request body of a POST?

martintajur commented 12 years ago

I've just recently worked on this and thought about sharing the work I did.

I've created a pull request with a patch that would use the HTTP request body instead of GET parameters when the request method is either POST, PUT or DELETE.

The pull request is here: https://github.com/mashery/iodocs/pull/33

Allblues commented 12 years ago

Thanks for the update Martin.

-----Original Message----- From: Martin Tajur [mailto:reply@reply.github.com] Sent: Thursday, June 28, 2012 5:26 AM To: Allblues Subject: Re: [iodocs] HTTP POST/PUT params (#3)

I've just recently worked on this and thought about sharing the work I did.

I've created a pull request with a patch that would use the HTTP request body instead of GET parameters when the request method is either POST, PUT or DELETE.

The pull request is here: https://github.com/mashery/iodocs/pull/33


Reply to this email directly or view it on GitHub: https://github.com/mashery/iodocs/issues/3#issuecomment-6625280


No virus found in this message. Checked by AVG - www.avg.com Version: 2012.0.2180 / Virus Database: 2437/5104 - Release Date: 07/01/12

ccervon commented 11 years ago

I just started using iodocs and so far I'm loving it. The only issue I have is that I have a few POST methods that require body parameters AND they can be used with a few query parameters as well. Is there a way to indicate which parameter goes in the body and which one goes in the query url?

sqmk commented 11 years ago

Interesting. I may take a look to see if a new option makes sense per parameter.

ghost commented 11 years ago

Can someone confirm if there is any way to put parameters in POST body. @ccervon : Did you find any solution?

aikalima commented 11 years ago

This seems to be working now, tested PUTs only. Example config:

{
                 "MethodName":"Update user",
                 "Synopsis":"Updates user with data supplied in request body",
                 "HTTPMethod":"PUT",
                 "URI":"/users/",
                 "RequiresOAuth":"N",
                 "parameters":[
                     {
                         "Name":"_id",
                         "Required":"Y",
                         "Default":"",
                         "Type":"string",
                         "Description":"user id"
                     },
                     {
                         "Name":"email",
                         "Required":"N",
                         "Default":"",
                         "Type":"string",
                         "Description":"email address"
                     }
                 ]
             }

Sends request BODY as: {"_id":"51256ef66b1acdb6e5000002","email":"ww@ff.com"}

ccervon commented 11 years ago

Adding parameters in POST body works fine.

Sidwick commented 11 years ago

@ccervon, Can you proved the Json of a post using body you are confirming?

{
    "MethodName": "addfacebookconnection",
    "Synopsis": "Add a Facebook Connect to the Current Customer Session",
    "HTTPMethod": "POST",
    "URI": "/visitor/addfacebookconnection",
    "RequiresOAuth": "N",
    "parameters": [
        {
            "Name":"Payload",
             "Required":"Y",
             "Default":"",
             "Type":"string",
             "Description":"user id"
        }
    ]
}               

Does not work

vky commented 11 years ago

You can check out the fork that I've been working on with @dgc-wh, https://github.com/vkorapaty/iodocs (check the 'example' branch, or can check out the live example here: http://iodocs.vky.me/whitehat). PUT and POST methods can have a request body in addition to query parameters.

I believe Issue #66 is also working on this.

Sidwick commented 11 years ago

@vkorapaty, @dgc-wh

beautiful work.

palanik commented 11 years ago

@vkorapaty, @dgc-wh ditto.

divyakumbukkal commented 10 years ago

@vkorapaty I tried pulling out the latest iodocs from https://github.com/mashery/iodocs but the POST with request body does not seem to be working. I pulled out the latest from your branch too but nothing is working. Could you help?

alexadkins commented 10 years ago

Closed by commit 8ff62fc525bbe4e155eaf4062a8f26b971430db2