Hi Jonathan,

As Kristian indicated, it suffices to specify the media-type or method
parameter. The content type will be generated by BaseX (see the
attached example).

If you want to return a non-standard or custom Content-Type header,
you’ll indeed need to construct your own response, either manually or
via the web:response-header helper function.

Hope this helps,
Christian

declare
  %rest:path('json')
  %output:method('json')
function page:test() {
  map { 1: 2 }
};

> curl -i "http://localhost:8984/json";
HTTP/1.1 200 OK
Date: Thu, 11 Nov 2021 18:14:42 GMT
Content-Type: application/json;charset=utf-8
Server-Timing: parse;dur=0.05 ms,compile;dur=0.12 ms,evaluate;dur=0.0
ms,serialize;dur=0.0 ms
Content-Length: 14
Server: Jetty(9.4.44.v20210927)

{
  "1": 2
}



On Thu, Nov 11, 2021 at 2:11 PM Jonathan Robie <jonathan.ro...@gmail.com> wrote:
>
> I want the query on the server side to specify the Content-Type header for 
> the response.  I didn't see how to do that from the link you provided.
>
> This seems to work - is there a better way?
>
>
> declare function as:json-response-headers()
>
> {
>
>   <rest:response>
>
>     <http:response status="404">
>
>       <http:header name="Content-Language" value="el"/>
>
>       <http:header name="Content-Type" value="application/json; 
> charset=utf-8"/>
>
>     </http:response>
>
>   </rest:response>
>
> };
>
>
> declare
>
>   %rest:path("/api/abbott-smith/index")
>
>   %rest:GET
>
>   %rest:produces("application/json")
>
>   function as:index()
>
> {
>
>   as:json-response-headers(),
>
>
>   array { $as:abbott-smith/*:entry ! @lemma ! string() }
>
>   ! serialize(., map {'method' : 'json'})
>
> };
>
>
> Jonathan
>
> [1] https://docs.basex.org/wiki/RESTXQ#Custom_Response
>
> On Wed, Nov 10, 2021 at 11:29 PM Kristian Kankainen <krist...@keeleleek.ee> 
> wrote:
>>
>> Hi Jonathan,
>>
>> Have you tried setting the media-type or method parameters to 
>> application/json instead of only the produces parameter, as explained here 
>> [1].
>>
>>
>> [1] https://docs.basex.org/wiki/REST#Content_Type
>>
>> Best regards,
>> Kristian Kankainen
>>
>>
>>
>> On 11. Nov 2021, at 02:32, Jonathan Robie <jonathan.ro...@gmail.com> wrote:
>>
>> Using RESTXQ in an application for the first time.  I expected this function 
>> to have the MIME type application/json:
>>
>> declare
>>   %rest:path("/api/abbott-smith/index")
>>   %rest:GET
>>   %rest:produces("application/json")
>>   function as:index()
>> {
>>   array { $as:abbott-smith/*:entry ! @lemma ! string() }
>>   ! serialize(., map {'method' : 'json'})
>> };
>>
>> But both POSTMAN and WADL give me application/xml as the mime type:
>>
>> <wadl:resource path="/api/abbott-smith/index">
>>   <wadl:method name="GET">
>>     <wadl:request/>
>>     <wadl:response>
>>     <wadl:representation mediaType="application/xml"/>
>>     </wadl:response>
>>   </wadl:method>
>> </wadl:resource>
>>
>>
>> What am I doing wrong?
>>
>> Jonathan
>>
>>

Reply via email to