For personal and university research, I am thinking of creating a simple CRM using a service-oriented architecture. Its purpose is simply to explain architecture, not commercial use.
I was thinking about implementing CRM, which offers simple analytics and customer service (user storage, personal comments, and a few other things).
The architecture that I design defines: - WebGUI (a client of other services) - AnalyticsService (a service that receives data, analyzes and collects it) - CustomerCareService (a service that uses the RESTful API to apply CRUD operations).
Each service has its own database, completely independent of the others. They open an open interface. Of course, the interface must provide some authentication in order to reject unauthorized requests.
The advantages that I would like to explain in this architecture are the ability to have all things indifferent and the ability to combine them to provide new services (for example, if OrderService processed orders, it would be easy to combine it with the Client using public APIs). The big advantage for me is that it would be easy to create other clients who use these services.
I don’t know what a good authentication method that can be easily implemented, I’m also not sure how to create these APIs (use XML or simple REST APIs with GET / POST data). I worked with Amazon, PayPal, and other company APIs, they seem to use REST services (paypal uses the ugly _cmd GET parameter, and Amazon uses the best URI) to know what to do, but reading something about SOA, it seems that people are also using XML. Of course, I also need to take into account that the web interface should be able to recognize a registered user, get permissions (token or something else) and use it with services to display information. So I'm not sure if SOA is such an architecture that I am really building up ... is it SaaS instead of SOA? I think it would be better to use RESTful applications with JSON or something like that to implement it (I am not a big fan of XML, I think this is too verbose).
For clarity, I will list my questions here:
- Is this architecture called SOA or SaaS (or both)?
- What is a good implementation for what I want to get? (please explain as detailed as possible)
- Which authentication is more suitable for the client (user token against OAuth or similar)
- Do you have any suggestion for such a project?
I have about 3 months to do this, so I can not do something real complex (besides the fact that it will not be realistic for one programmer).
I know Python (WSGI frameworks), Ruby on Rails, C / C ++ and other languages (.net exception), and I would like to develop it in a Linux environment (MySQL or Postgres or even NoSQL, if you have any suggestion for the right choice), I could also combine several languages that are these independent programs.
What I would like here is to have a good point of view and a good offer.
Thanks!