A lot of times during a system design a lot of architectural design decisions are based on architectural goals like performance, security, scalability, usability and so on. I believe that url crawlability (or with other words - RESTful urls) is often neglected (especially in Java, PHP, ASP.Net….) but should be considered as one of the top priorities among all other architectural design goals for every web enabled system.
As usual, Ruby on Rails excels in this area too and I could only learn from it but in the realm of Java, even if you want to do it you would have incredibly hard time. Almost all of the java web frameworks fail to provide a way to work with RESTful urls. A big exception to that is Stripes framework. The REST support is still missing, although it would be trivial to be implemented but RESTful urls are definitely there.
A lot of nice thing could be said about Stripes but better read it from their web site.
The only thing that I would like to add about this framework is that I had the chance to work with it for the last 9 months extensively (after working more than a year with Rails) and I can say that, in my opinion, this is not the best Java framework right now, but probably this is the ONLY Java WEB framework right now (at least from the ones that I have evaluated – and this list is very long!).
I went a little off point but I just wanted to say that currently I consider url crawlability/RESTful urls as one very important architectural design goal with a lot of benefits coming out of it and my first criteria evaluating any web framework is whether it could support RESTful urls or not.
Is this an important consideration in your design?
Recently, I had to answer to the questions:
What insight have you had lately in the realm of software development that you are excited about applying?
The answer turned out to be a little longer which made it a good candidate to post on my blog. So, there it is:
Well, there are a lot of interesting ideas that I am passionate to apply or improve in the technology area. Most of them are a few years old and there are successful examples of applying them, but still the majority of IT industry doesn't embrace them either because these ideas require a lot of effort and discipline or because it is mostly different mindset and vision.
If I can summarize most of the ideas in one sentence, it would be – using the web as a platform coupled with lean and lightweight business model to give the ability to strategically position a company as an middleman or automated intermediary between the user and his or her online experience, between customers and producers, between data providers and data consumers.
That includes a high accent on remixable data sources and data transformation, allowing users to control their own data and at the same time use their collective intelligence to generate new content or improve on the quality of existing data. (representing data in different formats –html, xml, json .. and on different platforms – mobile, browsers, desktop, real time positioning…., gather comments, ratings, reviews, adding own content, products…)
Support lightweight programming models that allow for loosely coupled systems and enabling constant changes and enhancements. I believe that by using lightweight frameworks, simple architectural design and more dynamic type programming a technology team could enable a business model to be more flexible and efficient. (conventions over configurations, simple web services –REST, syndication of data, autonomous distributed systems with smart ends )
For this to happen, I would think that the technology part of a company should concentrate on the core competency and re-use data or infrastructure services of others for everything else (storage services, virtual serves, emails, cloud computing and so on.)
Further, I think that businesses would have hard time in today's very competitive global economy if they don't go far and beyond for their users. From a technology point a view, I am very fascinated to implement features like real time monitoring of user behavior to find out what is valuable for them and what could be improve. Implementing features that would allow to enable and cooperate with users and not to direct or control them – simple user interface, intuitive searches, intelligently customizing application based on users behavior and data consolidation, different data formats, widgets, web service interfaces, content syndication and so on.
Last but definitely not least, I am very passionate about software development practices and methodologies. Exciting ideas that I would like to try or improve on are – extremely frequent releases, different types of collaboration and intelligent gathering of various project information including natural processing language algorithms to improve communications and common understanding.
Well, what are you excited about in the realm of software development recently?