There are broadly two use-cases for data sources that each require different behavior, and so providers typically model them differently:
This module depends on a single object that was defined elsewhere. In this case the data block is representing an assertion that this other object must exist along with returning the data about it so that the rest of the module can use it.
This module needs to declare a set of objects that each correlate with one existing object in the remote system but we don’t know statically how many already exists. In this case the data block represents a query for the full set of matching objects, and so the result is a collection of values.
Both of these are important in different situations. The convention is to use a singular name (which often matches the name of a similar managed resource type) for the first situation and a plural name for the second, so that it’s clearer to a reader of the module what sort of result and guarantee the data block is representing.