Introduction

TripPin is a sample service based on OData V4. Generally speaking, TripPin provides a service that can manage people's trips. The service is designed for below purposes:

  • Build a service that will cover as many features for OData V4 as possible.
  • Build a more real world service, and will use it to build an end-to-end ecosystem.
  • Make a service reference for developers to follow when they try to build an OData service. The source code will be published soon.

We are happy to announce that the source code of TripPin implemented using Web API OData is now available at GitHub. Please take a look and provide questions or feedback.

Please play with this new sample service for OData V4. You can use it either to know more about OData or build an application upon that. If you have any problems, suggestions, bug reports for TripPin, you can join OData Mailing List to discuss about it.

Model

The class diagram below describes the model design for TripPin

TripPinClassDiagram

Feature Coverage

As we mentioned in the introduction part, TripPin tries to cover as many features as possible. Below are the main features we covered in TripPin.

  • Basic entity / complex type and their collections

    For instance, Person is an entity and Country is a complex type. People is a collection of entity and AddressInfo is a collection of complex type.

  • Navigation property

    For instance, Friends is a navigation property.

  • Singleton

    Me is the Singleton

  • Collection property of primitive type

    For instance, Emails is a collection property of primitive type string.

  • Derived entity type

    For instance, entity type Event derives from PlanItem.

  • Derived complex type

    For instance, complex type EventLocation derives from Location

  • Open entity type

    For instance, Event is an open entity type.

  • Open complex type

    For instance, Location is an open complex type.

  • Containment

    For instance, Person contains Trips.

  • Functions and Actions (Bound and Unbound)

    For instance, GetNearestAirport is an unbound function, GetInvolvedPeople is a function bound to Trip and ShareTrip is an action bound to Person.

  • Enum Property

    Gender is an enum property.

  • Spatial Property

    Loc is a spatial property.

  • Media Entity

    For instance, Photo is a media entity

  • System query options ($select, $expand, $filter, $top, $skip, $count, $orderby, $search)
  • Lambda operations (any, all)
  • Create, Update, Delete
  • Batch
  • Etag
  • Async request
  • Annotations