2.2.7.2.3 RetrieveComplexType Request

The purpose of the RetrieveComplexType request is to enable the value of a ComplexType property on an EntityType instance to be retrieved by a client. AtomPub, as specified in [RFC5023], does not define operations on subcomponents of an entry resource. As such, this request type is not based on an AtomPub-defined [RFC5023] request.

A RetrieveComplexType request MUST use the HTTP GET method and the URI specified in the HTTP request line MUST be a valid data service URI that identifies a ComplexType property on an EntityType instance, as specified in URI Format: Resource Addressing Rules (section 2.2.3).

If the RetrieveComplexType request was successful, the response MUST have a 200 status code as specified in [RFC2616]. The payload of such a response MUST be formatted using XML, JSON, or Verbose JSON, according to the rules defined in Complex Type (section 2.2.6.5.1), Complex Value ([ODataJSON4.0] section 7.2), and Complex Type (section 2.2.6.3.4), respectively.

If the RetrieveComplexType request is not successful (for example, an error occurred while processing the request), the response MUST be formatted according to Error Response (section 2.2.8.1).

The syntax of a RetrieveComplexType request is defined as follows:

 retrieveCT-Req          = retrieveCT-ReqLine
                           retrieveCT-ReqHeaders
                           CRLF
  
 retrieveCT-ReqLine      = "GET"
                           SP entityTypeInstanceCTPropertyUri retrieveCT-QueryOps
                           SP HTTP-Version
                           CRLF
  
 retrieveCT-ReqHeaders   = [DataServiceVersion]        ; see section 2.2.5.3
                           [MaxDataServiceVersion]     ; see section 2.2.5.7
                           [If-None-Match]             ; see section 2.2.5.6
                           [Accept]                    ; see section 2.2.5.1
                           *(HTTP-Header-Types)
  
 entityTypeInstanceCTPropertyUri = <Any Resource Path identifying a ComplexType
                                    property on an Entity Type instance>
                                    ; see section 2.2.3 and section 2.2.3.5 -- URI3
  
 retrieveCT-QueryOps      = ["?" (customQueryOption / formatQueryOp) 
                            *("&" customQueryOption)]
                            ; see section 2.2.3.1 & section 2.2.3.6.1.5
  

The syntax of a response to a successful RetrieveComplexType request is defined as follows:

 retrieveCT-Resp         =  Status-Line                 ; see [RFC2616] section 6.1.1
                            retrieveCT-RespHeaders
                            CRLF
                            retrieveCT-RespBody
  
 retrieveCT-RespHeaders  =  DataServiceVersion          ; see section 2.2.5.3
                            [ETag]                      ; see section 2.2.5.4
                            *(HTTP-Header-Types)
  
 retrieveCT-RespBody     =  <Complex value formatted by using JSON as per [ODataJSON4.0]
                             section 7.2>
                            / <ComplexType property value formatted by using XML as per
                             section 2.2.6.5.1>
                            /(begin-object
                              quotation-mark "d" quotation-mark
                              name-seperator
                              (entityCTInVJson
                              end-object)
                              ; see section 2.2.6.3.4