Update:
I see @Bart updated his answer. Here's my update in case someone is looking for info about that specific integration.
The Salesforce CMS Connect basic integration expect HTML from whatever CMS it connects to.
The DXA modules by @NiclasCedermalm, you're considering include:
And the actual code:
https://github.com/NiclasCedermalm/dxa-fragment
The straightforward way to integrate with Salesforce CMS Connect is to create pages and expose the markup to that system.
Original answer:
+1 to @Bart's answer. I'd add "people" to the point on systems (which consist of people, process, and technology). The use case could be teams in the same company or external organizations and the needs can vary. You could also consider your own team's skills and preferences since you'll own the service.
It's hard to tell if you'd prefer OData or something else. :-)
Confirm the Use Case
For questions #1 and #3, the problem with something like /{lang}/{comp_id}/
is this ignores your content model and use case for integrations.
For example, if you wanted to share articles with other systems, I'd expect titles or dates to be exposed rather than IDs, especially if I didn't know Tridion.
As another example, for the Salesforce integration work, we assumed Connectors would use the Salesforce ID to identify a re-visiting contact (sales lead). But a preferred use case was to leverage the Content Delivery session ID to recognize a returning visitor. So what's really needed is something like field=some_value
rather than assume a system's ID is necessarily relevant in different contexts.
I'd prefer this "semantic" approach as well to help test across DTAP where titles may be the same, but IDs may differ.
Options
If you're looking for what you might consider, I've heard of a few customers or partners that have started or explored Java, .NET Core, or whatever for a back-end that exposes RESTful API alongside a Swagger (OpenAPI) definition.*
I don't see a problem with OData, per se, and apparently, you could do an OData service with an OpenAPI definition.
Unified Delivery is exploring GraphQL, which seems like a good fit for lighter-weight queries and entities that really have some meaning behind them (semantic).
*In terms of API specifications, I hear luke-warm expectations for *generated* clients, but this seems to go back to code generation in general. Most seem to appreciate/expect the specs for developer-friendly documentation and we're trying to use OpenAPI for that for all our new services.
Fragments?
I'm not familiar with a fragments DXA module. You can get a DXA website back in json format, if that's what you're thinking about.
I think creating something for your use case wouldn't be a waste if it solves your technical and business needs and especially if you need to evolve your content API independent of the underlying product(s). Just be sure to leverage Content Delivery for features like link resolving, the ADF, etc.
For more generic queries, sure, we'll introduce more features in the product and DXA so it'll depend on when you want such functionality and timing on your upgrade.