Improving RESTful Web Services
This proposal aims to improving the module RESTful Web Services to a more stable state by fixing bugs and adding new features. RestWS allows Drupal to expose it's data as web services based on the principles of Representational state transfer (REST).
Providing Drupal’s entities as web services allows you to access and modify it from external applications. That application could be an android app that allows users to sync contacts with Drupal or an IOS application which allows you to delete spam comments from a custom comment overview. The module could also be used to expose commerce customer profiles to a third party e-commerce application or to migrate other data to external platforms. While there are other web service modules like Services, RestWS offers a simple and lightweight approach to expose resources from Drupal, by making use of the Entity API. Every entity is therefore supported out of the box and can be accessed via the same path pattern (for nodes: "/nodes/1" or for users: "/user/1" and so on). The data format is defined by the HTTP accept headers, so if the client requests JSON or XML instead of HTML, it will get it. This allows site builders to easily add web service interfaces to existing frameworks like Drupal Commerce or eRecruiter(since both of them make heavy use of entities), without having to configure a lot stuff or writing any additional code. Following features and bug fixes would be implemented in this course:
- Fix XML bugs
- Fix data format requests
- Fix create entities problems
- Fix media integration
- Improve create and update operations, so that it matches the read operation format
- Add versioned services support
- Add additional entity querying methods
- Add additional authentication methods
- Improve rules integration
If you have any other ideas you can of course post them here, and I’ll consider to add them
Here are the details to the tasks that I would have to do. Some tasks still need discussion and I therefore will open new issues in the RestWS issue queue, so that everyone can can post their opinions.
- Fix XML bugs It seems that there are some problems with the XML output. A bug fix for that will probably be one of the first things I would implement.
- Fix create entities problems RestWS allows you to create entities without having to speicify all options (like if a node should be sticky or not), but certain options like bundles need to be specified, otherwise certain pages like the entity overviews will break. Thats another bug I'll have to fix.
- Fix data format requests I noticed that there are some cases, where the data format requested by the client is not returned, like on HTTP 404 or 403 errors. Since this breaks the principles of RestWS, this issue will have high priority for me.
- Fix media integration Currently RestWS has problems returning the path of media files, so I’ll have to fix that too.
- Add versioned services support If for example fields are added or deleted from a node type, the client needs to know that something has changed. By keeping track of node type versions, that problem could be solved. However, how this should be implemented is currently open for debate.
- Improve Create and update so that the formats matches the read format. The formats which is used to create or update a entities, differs from the those which are returned when you request an entity. The author of a node for example, is returned as a sub-object (when using JSON) with the uri, the id and the resource type (since it is a reference to another resource). When you add a new node however, the author is simply passed as an numeric value, which represents the id. This should be fixed so that RestWS uses an uniform format for all operations for each entity.
- Add additional entity querying methods While RestWS allows you to create, read, update and delete entities, currently there is no way to search for entities or to return all entity ids for a specific type. This seems to be a perfect fit for EntityFieldQuery to retrieve results. I’ll add those two features, but currently it is open how RestWS will limit the results (pagination?).
- Add additional authentication methods Currently you can only either authenticate using cookies or using the add-on module that comes with RestWS, that authenticates users via HTTP basic authentication. I would like to implement OAuth, so that people can restrict what they would like to share over the services, although its currently not entirely clear how to implement that.
- Improve rules integration Having own events for RestWS (e.g. “A web service has created a new node”) would be very use full, so that would be the last task to implement.
Since University in Austria doesn't ends until end of June, I would do most of the work in July and August, just like the years before.
- May 21
Fix create entities problems
Fix data format requests
Fix XML Bugs
- June 18
Fix media integration
Improve Create and update so that the formats matches the read format.
- July 9 [Module is stable Milestone]
[Begin to add new features]
Add additional entity querying methods
Add versioned services support
Add additional authentication methods Improve rules integration
- August 6
Improve Tests, write documentation
- August 24
Final evaluation deadline
My name is Sebastian and I'm a student from the Vienna University of Technology. I’ve been working with Drupal for almost 3 Years and contributed code to modules like Transformations, Pageroute and Rules and also have created modules like Autocomplete Deluxe and Rules Link. Some of them were made during past Google Summer of Code courses, which I successfully completed. Although I haven’t worked much with web services until now, I got enough experience with Drupal and Entity API. Therefore I’m sure I’m the right man for the job.
klausi (author of RestWS)
|File name||Size||Date submitted|
|GSoC-RestWSPatches.zip||136.3 KB||September 03 2012 12:40 UTC|