# Server architecture

## Server APIs

Orion defines a number of server APIs accessed via simple REST-oriented HTTP calls. These server APIs do not presuppose any particular server technology over straight HTTP, and JSON as the default representation format. Application developers are free to implement Orion server API with the server language and infrastructure of their choice. For a detailed listing of server APIs, see Orion/Server API.

## Example server

The current Orion server is written in Java, using Jetty and Equinox server infrastructure. This server does not currently define any Java API for extending or augmenting its behavior. Applications should be written against the HTTP server API, to allow for portability across server implementations. To avoid the perception of Orion providing a monolithic, definitive, extensible, irreplaceable server, the server is often referred to as an "example server".

The current server is structured into the following bundles(bundle names subject to change):

org.eclipse.orion.server
  Provides common provisional server API used by other parts of the server
org.eclipse.orion.server.servlets
  Defines servlets for the core Orion services: file, workspace, preferences
org.eclipse.orion.server.search
  Search servlet implementation using Apache Solr/Lucene
org.eclipse.orion.server.configurator
  Defines an application, and configures the server (registers servlets and static content, specifies authentication and authorization settings)
org.eclipse.orion.server.authentication.*
  Bundles providing various kinds of authentication support.

The server is split up this way to allow the pieces to be used in other server containers. You can discard the configurator bundle, and create your own server using the provided servlets and common code. This allows you to completely control the server layout, authentication, etc, for your server.