1.0.5 • Published 8 years ago

apispec v1.0.5

Weekly downloads
2
License
MIT
Repository
github
Last release
8 years ago

#ApiSpec Reader for Node.js/Express stack. ##Warning: This is purely experimental and should not be used in a production environment The apispec file format allows for creating complex apis with modules to handle routes.

name: Example API #Name the api
version: "1.0_rc2" #Api version. Not currently used but may implement a version scheme if you desire.
language: JavaScript #You must set a language for the server. This allows for spec files to be used in different languages, such as java or php.
module-aliases: #Case-sensitive!
    Authenticate: /example/auth.js #Add the user-defined authenticate module
    #You can override pre-defined modules here.
#There are a few pre-defined modules,
#Text, which uses the text option to send text
#PSQL, which querys the psql server defined in process.env.DATABASE_URL. Define input variables and their keys using an array called values
#File, which sends a file with the specified name, from the public/ folder

modules:
#    - ForceSSL
#    - Authenticate
paths:
    /:
        text: Hello and Welcome to my site! <a href="/file">Test</a> #Static text
    /file: 
        module: File #Send a file
        file: /example/public/test.html #File to send from public folder
    /favicon.ico:
        module: File
        file: /example/public/icon.png
    /api/core:
        paths:
            /search:
                method: GET #This is optional for get paths
                text: Hello World! #Send Hello, World Text
    /api/user:
        modules: 
            - Authenticate #Only Let Registered Users pass through to sub-paths of /api/user
        read: 
            authid: Int #Store user id
            authtoken: String #Store auth token
        paths:
            /me: 
                module: PSQL #Load the sql route module
                sql: SELECT * from users WHERE true #List all users
                single: false #This is not a single query
            /example:
                module: PSQL
                sql: SELECT * from users WHERE id = $1 LIMIT 1
                values: 
                    - authid #bind $1 to authid. 
                    ##List other parameters in order
                single: true #Expect exactly result.
            /secure: 
                paths:
                    /text: 
                        text: Hello!           
    /test:
        text: Hello World!
    /vm:
        module: VM
        javascript: |
                //Handle is the publicly exposed function
                function handle(req, res, next){
                    res.status(200).send("Hello From a VM! " + Date.now());
                }

#Invoking in express

var parser = require('apispec')(app, express, 'spec.yaml', __dirname);

//__dirname is passed to the spec parser so all modules can use the proper directory

#Running example

npm run example

#Core modules ###File Allows you to serve a file on an endpoint

/file: 
    module: File #Send a file
    file: test.html #File to send from public/ folder

###Text Allows you to serve static text on an endpoint

/text: 
    text: Hello!

###PSQL Allows you to query a database and serve the query results note: You should install and add the 'pg' module to your package.json to use the PSQL route

/database-search:
    module: PSQL #Select PSQL module
    sql: SELECT * from users WHERE id = $1 LIMIT 1 #Define the query
    values: 
        - authid #bind $1 to authid. 
        ##List other parameters in order
    single: true #Expect exactly one result

###ForceSSL forces all children endpoints to use ssl. You can use this in the top-level modules list

/secure: 
    route: true
    module: ForceSSL
    paths:
        #List child paths here

###VM Allows for handlers to be written directly inside the specfile (recommended for only small handlers)

/vm:
    module: VM
    javascript: |
            //Handle is the publicly exposed function
            function handle(req, res, next){
                res.status(200).send("Hello From a VM! " + Date.now());
            }

This code is released under the MIT licence

1.0.5

8 years ago

1.0.4

8 years ago

1.0.3

8 years ago

1.0.2

8 years ago

1.0.1

8 years ago

1.0.0

8 years ago