“The Open Data Protocol (OData) is a Web protocol for querying and updating data”
as defined on the OData site here. From a web developer’s point of view, I think it can be better defined as such:
‘A standardized syntax for RESTful web services’
As such, if you don’t have solid understanding of RESTful services and calling RESTful services with jQuery then I suggest you read the previous post in this series which addresses that topic specifically. I have also written a blog on OData in SharePoint 2013 specifically which assumes the knowledge laid out here.
OData protocol – agnostic of implementation
OData defines a standard syntax which defines how resource representations (entities) are queried via a RESTful URI:
[the base URI (eg http://server/service.svc)] + [the resource path (eg /departments)] + [the query options(eg ?$select=name)]. A standardised approach makes the service easier to work with for anyone with previous OData experience. The resource path can be determined as it is structured logically and the query options, once learned, are repeatable across services.
The resource path is used to locate a collection of entities, a single entity or a single property that the service surfaces in a hierarchical manner. E.g.
http://server/service.svc/departments– collection of departments
http://server/service.svc/departments(1)– single department
http://server/service.svc/organisation– single organisation
http://server/service.svc/organisation/name– name of the organisation
It’s worth keeping in mind that the OData protocol is fundamentally similar to SQL as it aims to achieve the same goal of data access. It is the query options that allow us to perform a subset of SQL-like queries: select ($select), where ($filter), order by ($orderby), join ($expand) and paging ($top and $skip) operations. E.g.
http://server/service.svc/departments?$select=name– returns only the name element for each department
http://server/service.svc/departments?$filter=name eq HR– returns only the HR department element
http://server/service.svc/departments?$orderby=name– returns all department elements sorted by name
http://server/service.svc/departments?$expand=directors– returns the department elements and including the department director
http://server/service.svc/departments?$skip=40&top=20– returns the third page of 20 results
Multiple query options can be used at once (
?$filter=staffCount gt 100&$select=name) to create complex queries. Note that a dollar sign ‘$’ character is prepended to each of OData query option parameters.
The filter query option may also support a range of math, string and date operations. It is important to remember, however, that an OData service has no obligation to support all (or any) query options.
Fundamentally, that is OData. The specification has a lot more to it but if you are comfortable with it at this level then it is just a matter or reading up on the spec. The blog post here expands a little on the fundamentals I’ve just described or the full spec can found here but it’s a rather difficult read as it’s raw unstyled HTML.
Please see the next post in this series on OData in SharePoint 2013 with jQuery.