def parse(self, body):
        """ Invoke the JSON API spec compliant parser

        Order is important. Start from the request body root key
        & work your way down so exception handling is easier to
        follow.

        :return:
            the parsed & vetted request body
        """

        self._parse_top_level(body)
        self._parse_resource(body['data'])

        resource = body['data']

        if 'attributes' in resource:
            self._parse_attributes(resource['attributes'])
        if 'relationships' in resource:
            self._parse_relationships(resource['relationships'])