REST is a set of ideas that promise to simplify communication between applications.
If you have not come across REST before, there is an entertaining description here.
Conventionally applications use something like Remote Procedure Calls to call on each other for services, but every single call tends to have different parameters and return values making it hard to generalise and fiddly to use. In REST, the interesting parts of an application are available as ‘resources’. Alfresco offers resources such as spaces (folders), files, people, tasks etc. Each resource can only do a strictly limited number of things, it can be created, deleted, changed or just read. That’s it. (The technical success of the World Wide Web can be largely attributed to REST, the resources are things with URLs, pages, pictures, tables of data, music etc. The operations in HTTP are PUT, POST and DELETE).
The designers of Alfresco have opened up the monolithic Java jungle inside Alfresco to expose the important resources. They have even documented it, a full list of approximately 370 Web Scripts (REST services) available from our Alfresco server is available at http://epsilon.nuhrise.org/alfresco/service/index, but you need to log in with the admin password!
In my opinion Alfresco also clutters the REST API with methods that return GUI elements, strictly speaking this is not REST because the resources are embelished with javascript for the user interface. The Forms Service in v3.4 is an example.
Inside Alfresco, the units of code that answer RESTful calls are called Web Scripts. They are written in Java and/or Javascript. The use of Javascript on the server side is clever because more people understand Javascript, and changes can be deployed with just a refresh of the web scripts rather than compiling and deploying Java class files. Otherwise one would have to maintain a Java build environment for the Web Scripts and employ at least half of somebody’s time just to develop and maintain the Java Web Scripts.