GithubHelp home page GithubHelp logo

bhanditz / swagger-socket Goto Github PK

View Code? Open in Web Editor NEW

This project forked from swagger-api/swagger-socket

0.0 2.0 0.0 1.3 MB

Swagger Socket: A REST over WebSocket

Scala 25.63% Java 44.24% JavaScript 30.13%

swagger-socket's Introduction

SwaggerSocket: A REST over WebSocket Protocol

Build Status

The SwaggerSocket protocol allows any existing REST Resources to be executed on top of the WebSocket Protocol. Resources can be deployed as it is, without any modification and take advantage of the SwaggerSocket protocol.

Join the community

You can subscribe to our Google Group.

Download SwaggerSocket

Using Maven or SBT

    <!-- Server side -->
    <dependency>
      <groupId>com.wordnik</groupId>
      <artifactId>swaggersocket-server</artifactId>
      <version>2.1.0</version>
    </dependency>

    <!-- Client side when using jquery.swaggersocket.js -->
    <dependency>
      <groupId>org.atmosphere.client</groupId>
      <artifactId>jquery</artifactId>
      <version>2.2.13</version>
      <type>war</type>
    </dependency>
    <dependency>
      <groupId>com.wordnik</groupId>
      <artifactId>swaggersocket.jquery</artifactId>
      <version>2.1.0</version>
      <type>war</type>
    </dependency>

    <!-- Client side when using swaggersocket.js -->
    <dependency>
      <groupId>org.atmosphere.client</groupId>
      <artifactId>javascript</artifactId>
      <version>2.2.13</version>
      <type>war</type>
    </dependency>
    <dependency>
      <groupId>com.wordnik</groupId>
      <artifactId>swaggersocket.js</artifactId>
      <version>2.1.0</version>
      <type>war</type>
    </dependency>

Manual download here

Getting Started

The quickest way to see how the protocol works is to try the samples. You can download them from here. Just do

  % unzip swaggersocket-{sample_name}-distribution.zip
  % chmod a+x ./bin/nettosphere.sh
  % ./bin/nettosphere.sh

and then point your browser to http://127.0.0.1:8080

You can also build the sample yourself and use Jetty instead of NettoSphere. By default, jetty9 is used in this case, but this can be changed with profile -Pjetty8

  % git clone https://github.com/swagger-api/swagger-socket.git
  % cd swagger-socket
  % mvn 
  % cd samples/swaggersocket-{sample_name}
  % mvn jetty:run

Take a look at HelloWorld mini tutorial. You can also look at our real time samples:

For Webapp samples, you can also download our war files and deploy them to any WebServer supporting WebSockets.

Note that both both Wordnik and Twitter Samples require a valid key to be configured in their corresponding web.xml file or passed as the command arguments when using nettosphere.sh. For details, refer to the README file of each sample project.

Add bi-directional support to your REST application

You can also add bi-directional support to your REST resources by extending your application using the Atmosphere Framework.

Quick Overview

To enable SwaggerSocket, add the following in your web.xml.

    <servlet>
        <description>SwaggerSocketServlet</description>
        <servlet-name>SwaggerSocketServlet</servlet-name>
        <servlet-class>com.wordnik.swaggersocket.server.SwaggerSocketServlet</servlet-class>
        <load-on-startup>0</load-on-startup>
    </servlet>

In addition, configure additional init-param parameters required to run the application. For example, when using jersey to load resources under package com.wordnik.swaggersocket.samples.

    <servlet>
        ...
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>com.wordnik.swaggersocket.samples</param-value>
        </init-param>

SwaggerSocket JavaScript API

The SwaggerSocket Client is defined as

    // use new jQuery.swaggersocket... when using jQuery, otherwise use new swaggersocket...
    var swaggerSocket = new jQuery.swaggersocket.SwaggerSocket();

Listeners are per Request. The responses will be delivered as they come and can be correlated with their associated request using response.getRequest().

    // use new jQuery.swaggersocket... when using jQuery, otherwise use new swaggersocket...
    var ss = new jQuery.swaggersocket.SwaggerSocketListener();
    ss.onOpen = function(response) {};
    ss.onClose = function(Response) {}; // Called when the Websocket gets closed
    ss.onError = function(Response) {}; // When an error occurs
    ss.onResponse = function(Response) {}; // When a response is ready
    ss.onResponses = function (Response) {}; // A List of all the ready responses

Opening a connection

    // use new jQuery.swaggersocket... when using jQuery, otherwise use new swaggersocket...
    var request = new jQuery.swaggersocket.Request()
          .path(document.location.toString())
          .listener(ss);
    swaggerSocket.open(request);

Sending requests -- You can send an array of Requests or single Request.

    var requests = new Array();
    // use new jQuery.swaggersocket... when using jQuery, otherwise use new swaggersocket...
    requests[0] = new jQuery.swaggersocket.Request()
            .path("path1")
            .method("POST")
            .data("FOO")
            .dataFormat("text/plain")
            .listener(ss);
    requests[1] = new jQuery.swaggersocket.Request()
            .path("/path2")
            .method("POST")
            .data("BAR")
            .dataFormat("text/plain")
            .listener(ss);
    swaggerSocket.send(requests);

SwaggerSocket Scala API

The SwaggerSocket protocol can also be used using the Scala language. The SwaggerSocket Scala library is using Asynchronous I/O so all the API calls are non blocking. First, you need to hanshake using

    val ss = SwaggerSocket().open(new Request.Builder().path(getTargetUrl + "/").build())

Then you are ready to start sending requests. As simple as:

    // send (Request, SwaggerSoketListener )
    // or send (Array[Request], SwaggerSoketListener)
    ss.send(new Request.Builder()
      .path("/b")
      .method("POST")
      .body("Yo!")
      .dataFormat("application/json")
      .build(), new SwaggerSocketListener() {
        override def error(e: SwaggerSocketException) {
           // Invoked when an exception occurs
        }
        override def message(r: Request, s: Response) {
           // Response is delievered here
        }
      })

Once completed, you just need to close

    ss.close

SwaggerSocket on Node.js

SwaggerSocket client (From 2.0.0) is available for Node.js. To see how it works, see the swaggersocket-echo-node-client sample.

SwaggerSocket on OSGi

SwaggerSocket (From 2.0.1) is not only OSGi enabled but also available as a Karaf feature. To see how it works, see the swaggersocket-cxf-osgi-echo sample.

How the protocol works

To read more about how the protocol works, take a look at the SwaggerSocket Protocol Specification

Versions

2.1.x release: 2.1.0

2.0.x release: 2.0.2 2.0.1 2.0.0


swagger-socket's People

Contributors

jfarcand avatar elakito avatar fehguy avatar webron avatar janxspirit avatar

Watchers

James Cloos avatar  avatar

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.