I have once worked on OData Service in different SAP product such as C4C, CRM and S/4 HANA and observed some technical differences among them. Now I share the difference in this blog.
OData Service in CRM
In CRM we develop OData service in tcode SEGW - SAP Gateway Service Builder.
Attributes for each node are modeled, together with the hierarchy relationships among nodes. Once Generation button is pressed, runtime Artifacts like data provider class DPC and runtime data provider class MPC are automatically generated based on the modelling done in this tcode. The classes without post-fix will be overwritten during generation while the latter which inherit from them will not, this means it is correct to write the application logic within the _EXT classes.
In tcode /IWFND/MAINT_SERVICE, it is allowed to route a given OData service to multiple Business Suite backend systems. In the runtime different RFC destination will be used to delegate the OData request to actual backend system according to the different PFCG role assignment of the logon user. See one example below.
OData Service in S/4 HANA
In S/4 HANA, it is still allowed to develop OData service via tcode SEGW. Meanwhile thanks to the power of CDS view, it is support to automatically generate a OData service without any ABAP coding. Suppose you need to develop a Fiori application which only needs to provide the read-only access on for example Service Order in the system. For this requirement not a single line of ABAP code is needed. Instead all the necessary development task is to create CDS view, and that's all. Once all views are done, activate the view containing annotation @OData.publish: true, and the OData service will automatically be generated.
The left task is to create a UI5 project via WebIDE with smart template to consume this generated OData service. More details could be found from these blogs of mine: