There are services that supply data and those that implement functionality. The data-oriented services (often called RESTful) can be queried (with CRUD operations), just like a relational database. In fact, many of the things that you can do with SQL, can be achieved with these data-oriented services, and this is really useful for some services on the server-side. On the other hand, we have the functional services that works like a function, which takes a number of parameters, performs some logic, which usually include data operations, and return a consolidated result. There are two different ways to implement these services, and either they are using light-weight data formats like JSON or they using heavy-weight formats like SOAP and XML. What we want to achieve are light-weight functional services.
When a device accesses a service on a low bandwidth, it’s important to do as much as possible with as few requests as possible and that is really difficult with data services. Also, some calls don’t even map to a relational data structure. Let me take an example of searching prices for flights (which I worked with recently), where you want to make a single request with all parameters (from, to, dates, number of passengers, currency, etc) and get a simple answer with just the information needed to show in the user interface.
This example also show that there is often a need to implement logic for the data (validation, calculations, etc), and if you only have services that deliver data, you have no other option than to implement the logic on the client side (in the app). That becomes a real problem when you have multiple clients using the same service, which is the case for most omnichannel services, because then you would need to implement the same logic on each client platform. Not only does that mean extra work in both initial implementation and maintenance, but it will be really hard to make sure the logic is the same in all channels.
So, the conclusion is that you should put as much logic as you can on the server side, and create light-weight functional omnichannel services.
About Christian Forsberg
Chris Forsberg is Sogeti's Global Chief Architect, and his current passion is serverless architectures with microservices, cognitive solutions like chatbots, automation, and beautiful delivery. He has a long background as an architect of digital solutions for many clients on all the major platforms, and love to experiment with new technology. For example, he has put together a YouTube video series on how to get started with the Internet of Things, and has been involved in the implementation of more than 100 apps on iOS and Android. With a global network of 600 architects, he is devoted to creating intellectual property, and one example is Digitecture, a reference architecture for digital platforms. Other examples are Appitecture®, a start package for app projects, and Appcademy®, a certification program for app developers. Chris has received several technology leadership awards including Top 100 Developers (Sweden), and ten years awarded Most Valuable Professional (MVP) by Microsoft. He was an official writer for Microsoft Developer Network (MSDN) for many years and has also co-authored a book on mobile development in 2001.
More on Christian Forsberg.