I am having a question about the architecture I am working with.
we have a backend restful service, a data layer(which is implemented by python eve and also a restful service), and the database. The data (access) layer itself is a independent restful api.
In our backend service application, we have a customized python eve repository which make calls to to data (access) layer and then data layer will query whatever asked by the call from database.
The reason to have it separate, one is that we want to isolate data logic(query logic) from our business logic(backend service).
The cost is obvious, another layer, another round of I/O for every query.
Can anyone with experience of architecture tell me is this separate data access layer a good practice or not and why?
Looking at architecture you are discussing in question, your project must be large enough to justify development cost of it. For small projects this architecture will be overkill.
Assuming your project is large enough, yes; it is always good to separate DAL, BLL and Application layers. Refer this and this.
The benefit is clean separation which improves understanding, given you control over each part and reduces maintenance cost.
On other hand as you said, cost is obvious (another layer, another round of I/O). Yes; that is why my first paragraph discusses about size of project. In large projects, it's a trade-off; you are choosing one over other.
In large projects, primary objective should be maintainability IMO. Understand that premature optimization is the root of all evil. So, you start with good maintainable architecture. Each technology recommends basic rules for improving performance; implement them initially. If you see any performance issue over the time, find and fix it. In fact, due to separated layers, it is easy to find bottleneck.
There are other benefits as well. You can unit test each layer separately. You can work on each layer independently for anything like improving performance, shifting technology etc. Debugging will be too easy.