GithubHelp home page GithubHelp logo

mulesoft / api-console Goto Github PK

View Code? Open in Web Editor NEW
905.0 905.0 238.0 86.56 MB

An interactive REST console based on RAML/OAS files

License: Other

HTML 0.71% JavaScript 99.29%
raml raml-document raml-tooling

api-console's People

Contributors

3miliano avatar agustinlg avatar alejofernandez avatar alexpmule avatar baoti avatar blakeembrey avatar carowright avatar clarkcutler avatar dependabot[bot] avatar hiuxmaycry avatar jarrodek avatar jcenturion avatar jisoldi avatar joaquinstan avatar juancoen avatar krishahn avatar lbauret avatar leandrogilcarrano avatar llattes avatar mseashor avatar nazaquintero avatar pose avatar pritambaral avatar sichvoge avatar tokafish avatar twoplustwoone avatar ty10r avatar viceversus avatar xaka avatar zirkome avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

api-console's Issues

Pass in "Load from URL" value via the URL

Is there any way to load the api console and have it pull the "Load From URL" value in through the URL as a get argument? I would like to have a link to the API console which will load my RAML file automatically without having to paste it into the "Load From URL" box and submitting that data.

Thanks

Optional properties in resource types not optional after being inherited

If a method is defined as optional in one resource type and then inherited by another resource type, with the 'type' keyword, that also defines the same method as optional, then that method appears to no longer be optional. The api-console displays all resources defined with the child type to have that method. Optional methods should stay optional if it is optional through out the entire list of inherited resource types.

A minimal example:

#%RAML 0.8

---
title: 
resourceTypes:
  - common:
      get?:
  - base:
      type: common
      get?:
/files:
    type: base

Here /files will be shown to have a GET method when it should not.

Parameters should be required

Given the following yaml:

%TAG ! tag:raml.org,0.1:

title: Employees API
version: v0.2
baseUri: http://localhost:9091/api/
/employees:
name: Employees
get:
responses:
200: !!null
/{employeeId}:
name: Employee
get:
responses:
200: !!null

Going to /employees/{employeeId} should enforce that an id should be specified.
Right now it is not being validated, and it retrieves all employees (same as get:/employees/).

Any interest in the ability to pass in a RAML path when the server is started?

Hey all! I'm relatively new to RAML, but have an idea I'd like to throw out. Currently, the RAML console can be "seeded" with a RAML file by either a query string parameter, form field, or the iframe method.

I have something in mind that could help when using the console as RAML is being developed OR when the console is running on a server for users to view.

In particular, it seems like it would be useful to be able to pass in a path for a RAML file when the server is created. For example, grunt server --raml=http://mydomain.com/docs.raml or grunt server --raml=/some/local/path/docs/raml. That latter allowing a local file to be easily passed in during development.

Does this fly in the face of other functionality? At first glance, it doesn't appear that there is anything similar in place.

Add image to comply with license

The license under which the API console is released requires attribution in any UI presented by the code. Please add the "Powered by Mulesoft" logo to help users comply with the license requirements.

[CHANGE REQUEST] Keyboard Shortcut CTRL-Delete

Really happy getting my api accessible via console, having the full code completion features available is quite nice, however i find myself deleting whole code blocks without intent while just wanting to delete the last word when i hit CTRL+BACKSPACE.

For one, technically this is a different from CTRL+DELETE.
For worse, it breaks consistent user experience (I heavily rely on this "move" ;) and basically have been relying blindly on it for years) - whereever there's a gui notepad, office document editor, code IDEs, address bar urls and most importantly Text-Boxes on HTML WebForms all behave this way; no matter whether on Windows or KDE

Cannot POST /proxy

I am running mule locally (survivor:8095) and api-console locally (localhost:9000). As a comparison I also have the console available from the mule application. When I try an example request using the mule hosted console I get a 201 as desired. However when I try the same request from the stand-alone api-console I recieve the following error:

Cannot POST /proxy/http://survivor:8095/prioritisation/api/jobs

Looking in the mule logs I get:

2014-06-02 15:38:48 WARN Router:265 - No matching patterns for URI

So the request is reaching the mule REST service but for some reason it can't match the request. I'm a bit stumped as to how this is?

Parser is failing on description within response

According to the specification, a response may contain a description (see below), but the api-console parser fails when there is such an element.

From http://raml.org/spec.html:

/media/{mediaid}/content:
displayName: Content
get:
description: |
Get a media file.
responses:
200:
body:
"/":
description: |
Returns the media file.

Responses MAY contain a description property that further clarifies why the response was emitted. Response descriptions are particularly useful for describing error conditions.

CLI & static documentation generation

More like an enhancement - not everyone in this world is using node.js or is willing/allowed to have all its related mumble-jumble installed on the infrastructure servers.

What would be really nice is to have a CLI command to generate static documentation (similar to https://readthedocs.org, as example). The feature of "Try it" can also be included and rely on a proxy, which settings would be provided before generation.

I'm willing to contribute, but not with the current stack used for implementation :-(

'grunt build' fails

...
Running "copy:dist" (copy) task
Copied 3 files

Running "copy:embedded" (copy) task
Copied 20 files

Running "cdnify:dist" (cdnify) task
Warning: Unable to read "bower.json" file (Error code: ENOENT). Use --force to continue.

Aborted due to warnings.

Oauth 1.0 base signature string is encoded with %2C (comma) instead of ampersand

this is causing signature not matching with other library trying to authenticate requests.

Api-console

GET&http%3A%2F%2Flocalhost%3A8080%2Fimage-discovery-services%2Fapi%2Ftrs%2Fv1%2Fresolve%2Fsearch_movie&oauth_consumer_key%2Cc699a675ed4b813ca4c44d8feac3262a0a5ff67eb88b1c01b79db4dfec345b6b%2Coauth_nonce%2Cadc99bbfc7e15b2b53b5ec7e2250131b%2Coauth_signature_method%2CHMAC-SHA1%2Coauth_timestamp%2C1403222645%2Coauth_version%2C1.0%2Cw%2Cgladiator

According to RFC 5849

GET&http%3A%2F%2Flocalhost%3A8080%2Fimage-discovery-services%2Fapi%2Ftrs%2Fv1%2Fresolve%2Fsearch_movie&oauth_consumer_key%3Dc699a675ed4b813ca4c44d8feac3262a0a5ff67eb88b1c01b79db4dfec345b6b%26oauth_nonce%3Dc4e9dadd7baf72ea9d363d70adf273c3%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1403220735%26oauth_version%3D1.0%26w%3Dgladiator

TryIt: Console Response always in delete response body

When I use the console to 'get' a resource the response is displayed into the delete tab

#%RAML 0.8

---
title: ANY API
version: 1
baseUri: /api
/resource/{resourceId}:
  get:
    description: Get the content of a resource.
  post:
    description: Create a resource.
  delete:
    description: Delete a resource.

How to disable oauth-1 token calls

We are using zero legged oauth-1 . Can anybody tell how to disable all the token calls

/oauth/1/request_token/
/oauth/1/authorize/
/oauth/1/access_token/

I just need signature generation using consumerkey and consumersecret

Query string parameters getting stripped by api-console?

I have api-console running on the same box as an NGINX proxy server (which proxies our APIs to circumvent CORS issues).

The 'Try It' feature works fine. . .

unless I pass a URL to the proxy with query params. It appears that the query params are getting stripped out by api-console because the 'Request URL' under 'Response' shows with the query params stripped out. Of course, this results in a 404. . .

oh yes, NGINX is setup to forward along query params. . .

Query parameters info is not displayed

Query parameters should be displayed either in the parameters tab or somewhere in the verb's documentation. Currently it's not displayed anywhere and the user should have the possibility to see that information.

yaml file

%TAG ! tag:raml.org,0.1:

title: Employees API
version: v0.2
baseUri: http://localhost:9091/api/
documentation:
- title: Employees
content: |
Welcome to the Employees API Documentation. The Employees API
allows you to view a complete list of your employees. You may also
add or delete employees to keep the list up to date.
- title: Contact
content: |
If you need support, please contact [email protected].
- title: More info
content: !include more_info.txt
/employees:
name: Employees
get:
summary: Get a list of employees.
description: |
The employees returned will display the following data: First Name,
Last Name and Birth Date.
queryParameters:
firstName:
description: |
First Name of the employee. This value is not required.
type: string
required: no
example: "Joseph"
lastName:
description: |
First Name of the employee. This value is not required.
type: string
required: no
example: "Joseph"
responses:
200:
body:
application/json: !!null
text/xml: !!null
404:
description: Resource not found.
405:
description: Method not allowed.
415:
description: Unsupported media type.
406:
description: Not acceptable.
400:
description: Bad request.

doubt:

do we need to have bower_components inside /app/vendor
i could see this directory missing.

RAML from URL doesn't work

I put up a copy of this project on heroku today to demonstrate the issue:

http://raml.herokuapp.com/

If I put in https://raw.githubusercontent.com/kevinrenskers/raml2html/master/example.raml

The URL, it does not work. I've also tried using http://pastie.org with raw content and it also fails.

Furthermore, it would be nice if something like: http://raml.herokuapp.com/?raml_location=https://raw.githubusercontent.com/kevinrenskers/raml2html/master/example.raml

Actually worked so I could share a link to documentation with people directly.

'Try It' should provide templates based on JSON Schema

We can define the expected request body through RAML and I think that the console could provide some kind of template based on the JSON schema (of course only if some JSON content type is selected).

Example:
I have the following very basic JSON Schema:

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "title": "collection_command",
  "description": "Writable collection representation",
  "properties": {
    "name": {
      "type": "string"
    },
    "description": {
      "type": "string"
    }
  },
  "required": ["name"],
  "additionalProperties": false
}

I switch to 'Try It' in the web console and choose application/json as my content type. The web console automatically inserts the following basic template:

{
  "name": "TODO",
  "description: "TODO (optional)"
}

Now I don't propose to go crazy about this and support the vast amount of features that JSON schema supports, e.g. patternProperties, but a simple template generation for named properties (given the schema type is object) is possible.

Thinking further: This could even be extended to other schema types (XML), but I believe that JSON schemas would be a good place to start.

I would be willing to contribute if you find this feature acceptable for the api-console project.

Not able to "try it" on custom auth security schemas

After a while of figuring out that I can't use try it, if I'm using a custom security schema, I'm all ready to go and fork the project to implement the changes required - but then I saw that there's a new version of console coming out soon? I see the features/console-2.0 branch too - should I be trying to add this functionality to the existing console or should I try out console v2? Does console v2 already have this functionality?

Thanks!

configurable/hide anonymous option in try_it.

Currently, if your API ONLY supports authenticated calls (and not anonymous) you are still shown on the API Console this option on the try it section, and this is misleading to developers using the console.

This is because in app/views/security_schemes.tmpl.html the line 8

      <toggle-item heading="Anonymous"></toggle-item>

is hard coded to always show anonymous regardless of API configuration, and the only way to disable this is deleting the line on the source code... this should be configurable or it should be shown only when NO security (secure_by) is defined for the service.

Bad rendering of of multipart/form-data file example

Example file for a multipart/form-data file field is not rendered correctly:

body:
  multipart/form-data:
    formParameters:
      file:
        type: file
        example: !include example.json

is rendered this way:
screen shot 2014-07-15 at 6 22 04 pm

when it should be rendered like any other example file:
screen shot 2014-07-15 at 6 20 07 pm

Need better refresh and error handling

I've cloned this repo and deployed the dist in a Tomcat engine.
I've found three (serious) usability issues with the single page model.

On the initial screen, I enter the URL of a RAML doc and select [LOAD FROM URL] After exploring it a bit, I go to my (external) editor and update/save the RAML.

To refresh in the API Console, I cannot use the browser Back button; I must refresh the page. This is very unintuitive as the initial button feels like a submit. Further, when I refresh, the URL field is empty and I have to copy/paste the URL again to refresh. If this worked more like a submit/back, this would be much easier to use.

Also, if there is a syntax error in the RAML, I get back a display of some unformatted JSON with the error message inside it, and this is hard to decipher. It would be better to list the error message and line number, then show the RAML and highlight the error.

Finally, if instead of pasting in a RAML URL, if I paste in full RAML then select [ LOAD RAML] to try it out, again I can't use the browser Back button to return to my RAML source and edit it. If I refresh the page, the RAML source is gone. Again, a Submit/Back user experience would be much better.

[Yes, I know I can use RAML API Designer but its persistence model does not work well with other toolchains, alternate source layouts such as using a schemas/ subdirectory for ll schema files... in fact I can't get it to recognize .xsd schema files ]

I believe there is another request to allow passing the RAML URL to API Console startup - a query parameter would be very useful if I could refresh to reload.

Accept Header Enum Not usable

Enum not usable on Headers

#%RAML 0.8

---
title: ANY API
version: 1
baseUri: /api
/resource/{resourceId}:
  get:
    description: Get the content of a resource.
    headers:
      Accept:
        enum:
          - application/json
          - text/html

Post is not working from console

When trying to use post, the following error is displayed:

Response
REQUEST URL
http://localhost:9091/api/employees/1
RESPONSE CODE
500
RESPONSE HEADERS
connection close
content-length 129
content-type application/json;charset=UTF-8 application/json
date Tue, 23 Jul 2013 13:39:42 -0300
http.status 500
server Mule EE Core Extensions/3.4.0
x-mule_encoding UTF-8 application/json
RESPONSE BODY
Could not read InputStream. (org.mule.api.transformer.TransformerException). Message payload is of type: ContentLengthInputStream

THE PROBLEM IS THE CONTENT TYPE VALUE:

Content-Type:application/json;charset=UTF-8 application/json

IT SHOULD BE

Content-Type:application/json;charset=UTF-8

OR JUST

Content-Type:application/json

Below, the yaml used:

%TAG ! tag:raml.org,0.1:

title: Employees API
version: v0.2
baseUri: http://localhost:9091/api/
documentation:
- title: Employees
content: |
Welcome to the Employees API Documentation. The Employees API
allows you to view a complete list of your employees. You may also
add or delete employees to keep the list up to date.
- title: Contact
content: |
If you need support, please contact [email protected].
- title: More info
content: !include more_info.txt
/employees:
name: Employees
get:
summary: Get a list of employees.
description: |
The employees returned will display the following data: First Name,
Last Name and Birth Date.
queryParameters:
firstName:
description: |
First Name of the employee. This value is not required.
type: string
required: no
example: "Joseph"
lastName:
description: |
First Name of the employee. This value is not required.
type: string
required: no
example: "Joseph"
responses:
200:
body:
application/json:
example: !include employees.json
404:
description: Resource not found.
405:
description: Method not allowed.
415:
description: Unsupported media type.
406:
description: Not acceptable.
400:
description: Bad request.
/{employeeId}:
name: Employee
get:
summary: Get a particular employee.
responses:
200:
body:
application/json:
example: !include employees.json
404:
description: Resource not found.
405:
description: Method not allowed.
415:
description: Unsupported media type.
406:
description: Not acceptable.
400:
description: Bad request.
post:
summary: Create a new employee.
body:
text/xml: !!null
application/json:
schema: !include employee_insert.json
responses:
202: !!null
404:
description: Resource not found.
405:
description: Method not allowed.
415:
description: Unsupported media type.
406:
description: Not acceptable.
400:
description: Bad request.

jsons included in yaml:

employees.json

{ "$schema" : "http://json-schema.org/draft-03/schema",
"id" : "http://jsonschema.net",
"properties" : { "birthDate" : { "id" : "http://jsonschema.net/birthDate",
"required" : false,
"type" : "string"
},
"employeeId" : { "id" : "http://jsonschema.net/employeeId",
"required" : false,
"type" : "number"
},
"firstName" : { "id" : "http://jsonschema.net/firstName",
"required" : false,
"type" : "string"
},
"lastName" : { "id" : "http://jsonschema.net/lastName",
"required" : false,
"type" : "string"
}
},
"required" : false,
"type" : "object"
}

employee_insert.json

{ "$schema" : "http://json-schema.org/draft-03/schema",
"id" : "http://jsonschema.net",
"properties" : { "birthDate" : { "id" : "http://jsonschema.net/birthDate",
"required" : false,
"type" : "string"
},
"firstName" : { "id" : "http://jsonschema.net/firstName",
"required" : false,
"type" : "string"
},
"lastName" : { "id" : "http://jsonschema.net/lastName",
"required" : false,
"type" : "string"
}
},
"required" : false,
"type" : "object"
}

Error: NETWORK_ERR: XMLHttpRequest

When entered a valid URL to a RAML file:

{"context":"while fetching http://localhost:8000/api.raml","context_mark":null,"message":"cannot fetch http://localhost:8000/api.raml (Error: NETWORK_ERR: XMLHttpRequest Exception 101)","problem_mark":null,"line":11795,"sourceURL":"http://localhost:9000/vendor/raml-parser.js","stack":"fetchFile@http://localhost:9000/vendor/raml-parser.js:11795:128\nreadFile@http://localhost:9000/vendor/raml-parser.js:11757:30\nhttp://localhost:9000/vendor/raml-parser.js:11704:30\napply@http://localhost:9000/vendor/raml-parser.js:1793:31\npromiseDispatch@http://localhost:9000/vendor/raml-parser.js:1432:46\nhttp://localhost:9000/vendor/raml-parser.js:2044:40\nflush@http://localhost:9000/vendor/raml-parser.js:877:21\nhttp://localhost:9000/vendor/raml-parser.js:740:23"}

Expand $ref schemas

I'm not sure if this is possbile.

It'd be great if we could expand the schemas completely.That is, expand "$ref" keys to other schemas inline.

Do not render preview of binary content types

It would be great if the API console could detect binary content types and not try to render them in a textual format. Having this issue right now with image/jpeg.

Now, it is still interesting to try such things via the API console, but the presentation format could differ. A simple implementation could show a message that the server's response is in a binary format and/or too large for a preview.

Repeatable headers are rendered wrong

This is a minimal example of the problem. I have the following RAML file:

#%RAML 0.8
title: sample
baseUri: http://localhost/
version: v1
mediaType:  application/json

/pages:
  get:
    headers:
      link:
        repeat: true
        type: string

After I try to render it in a "Try it" tab, the "link" header is rendered with a little "plus" sign next to it, so that it can be multiplied, to provide multiple values.

However, as soon as I add second header by pressing this "plus" sign, the second header gets the same value as the first header, and whichever input field I modify, the other gets modified as well. This makes the feature completely unusable.

SecurityScheme description not displayed

The RAML spec v0.8 allows for a description on each security scheme.

Unfortunately, this is not reflected in the api-console when selecting an Authentication mode.

On some APIs the actual required values are not implicit when looking at a standard authentication type (i.e. in the Parse API), thus i believe it will be quite useful to display the description value.

Actually: Building on the parse api example, it would be even more favorable to also have an ability to provide descriptions on the expected input parameters, i.e. defining more exactly what an API expects for username and password in a BasicAuth-Scheme. Not sure - is that possible with RAML v0.8 at all?

OAuth 2.0 Client Credentials Supported?

We secure our api using OAuth 2.0 using client credentials but I can't get it to work using the 'Try It' functionality in api-console.

The RAML spec says that the authorization grants can be any of: code, token, owner or credentials but I get a javascript error when I try to use credentials that says the authStrategy is undefined. My javascript isnt amazing but the GRANTS array in the OAuth 2 section (https://github.com/mulesoft/api-console/blob/master/dist/scripts/app.js#L720) it only has code and token. If I use code or token I do not get the same js error.

Am I missing something or is client creds unsupported?

Thanks

enum in queryParameters is not working

This looks like a bug.

How to reproduce:

  1. set an endpoint with queryParameters.
  2. set the enum property for a new query parameter.
      get:
        queryParameters:
          test:
            description: test the enum property
            enum: [Test1,Test2]

3 if the test parameter is set for example to Test1, the client makes a call like GET /test

Expected :

  • client should make a call like GET /test?test=Test1

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.