Swagger 2.0: Open source REST API framework

[Swagger 2.0 logo

http://swagger.io/

From the Swagger 2.0 Github page:

The goal of Swaggerâ„¢ is to define a standard, language-agnostic interface to REST APIs which allows both humans and computers to discover and understand the capabilities of the service without access to source code, documentation, or through network traffic inspection. When properly defined via Swagger, a consumer can understand and interact with the remote service with a minimal amount of implementation logic. Similar to what interfaces have done for lower-level programming, Swagger removes the guesswork in calling the service.

Use cases for machine-readable API interfaces include interactive documentation, code generation for documentation, client, and server, as well as automated test cases. Swagger-enabled APIs expose JSON files that correctly adhere to the Swagger Specification, documented in this repository. These files can either be produced and served statically, or be generated dynamically from your application.

Without going into a long history of interfaces to Web Services, this is not the first attempt to do so. We can learn from CORBA, WSDL and WADL. These specifications had good intentions but were limited by proprietary vendor-specific implementations, being bound to a specific programming language, and goals which were too open-ended. In the end, they failed to gain traction.

Swagger does not require you to rewrite your existing API. It does not require binding any software to a service–the service being described may not even be yours. It does, however, require the capabilities of the service be described in the structure of the Swagger Specification. Not all services can be described by Swagger–this specification is not intended to cover every possible use-case of a REST-ful API. Swagger does not define a specific development process such as design-first or code-first. It does facilitate either technique by establishing clear interactions with a REST API.

Apache Usergrid: Open Source Java & Cassandra based Backend as a Service (BaaS) that you can host yourself

Apache Usergrid logo

http://usergrid.incubator.apache.org/


Learned about this at one of the sessions at the DevNexus software developer conference in Atlanta. It has built-in support for:

  • User Management: Sign up, log in, reset passwords, groups, roles, permissions, access, OAuth 2.0. No server code required.
  • Data: JSON stored in Cassandra, retrieve data via SQL, do graph queries, do joins.
  • Files: Asset storage can handle anything from text files to videos of several terrabytes, automatic content-detection, full URL access control. In the back, uses Amazon S3 or other preferred cloud file store.
  • Java-based: Built on Jersey, Jackson, Apache Cassandra and Lucene.
  • SDKs: For iOS, Android, HTML5/JS, Node.js, Ruby, Java, .NET, and PHP (plus REST APIs)

Prometheus: Open-source service monitoring system and time series database written in Go

Prometheus logo

http://prometheus.io/


From the Prometheus website:

  • Data model – Time series identified by metric name and a set of key-value pairs.
  • Query language – Allows slicing and dicing of collected time series data in order to generate ad-hoc graphs, tables, and alerts.
  • Visualization – Built-in expression browser, a GUI-based dashboard builder, and a console template language.
  • Storage – Stores time series in memory and on local disk in an efficient custom format. Scaling is achieved by functional sharding and federation.
  • Operation – Each server is independent for reliability, relying only on local storage. Written in Go, all binaries are statically linked and easy to deploy.
  • Client libraries – Client libraries allow easy instrumentation of services. Currently, Go, Java, and Ruby are supported. Custom libraries are easy to implement.
  • Alerting – Alerts are defined based on Prometheus’s flexible query language and maintain dimensional information. An alertmanager handles notifications and silencing.
  • Exporters – Existing exporters allow bridging of third-party data into Prometheus. Examples: system statistics, as well as Docker, HAProxy, StatsD, and JMX metrics.