[Developers] mqlread http response header (content-type)

Augusto Callejas acallejas at appliedminds.com
Fri Sep 19 17:21:12 UTC 2008


alec-

there is no reason why i need "application/json".
i'm more concerned that the current response includes "char-set=utf-8"

from my previous reply to the mailing list:

my problem is with the mqlread HTTP response header Content-type, which is
returning char-set=²utf-8².
i contend that the the content type should be either ³application/json² or
³text/plain² WITHOUT char-set=²utf-8².
by not specifying the char-set, the ³\u001a² characters above would pass
thru the HTTP layer without being decoded,
and thus allow any JSON library to decode them properly.

there seems to be a conflation between encoding on the HTTP layer and
encoding on the JSON layer.

³\u001a² --(HTTP utf-8)--> string with one character 0x1a  --(JSON)-->
invalid character in JSON (should be encoded)

³\u001a²--(HTTP w/o utf-8) --> ³\u001a² --(JSON)--> string with one
character 0x1a 

you can see this with the following query:

=====
{"q":{"query":
{
  "master_property" : "/type/object/name",
  "operation" : "delete",
  "source" : {
    "guid" : "#9202a8c04000641f8000000006e31736"
  },
  "target_value" : {
    "value" : null
  },
  "timestamp" : "2008-08-30T18:56:23.0000Z",
  "type" : "/type/link",
  "valid" : null
}
}}
=====

augusto.


On 9/19/08 9:49 AM, "Alec Flett" <alecf at metaweb.com> wrote:

> 
> Below is the long answer. The short answer is "the docs are out of
> date" :)
> 
> Much of the reasoning is practical -  application/json made it really
> hard to debug because browsers refuse to display application/json
> directly in the browser - application/json makes the browser prompt
> the user with a save/launch dialog. Not to mention that certain APIs
> (like image upload) can only be run in IFRAMEs in the browser, which
> means those APIs must return text/plain so they can be intercepted and
> parsed by JS.
> 
> When you're developing against a JSON API, it's much easier to see
> this stuff visible instead of launching a separate app like notepad /
> textedit.
> 
> When considering the above, there didn't seem to be any actual value
> in making it return application/json - nobody we talked to could come
> up with a reason that making it application/json would be any better
> than it returning text/plain
> 
> Augusto - is there a particular reason you need application/json?
> 
> Alec
> 
> On Sep 18, 2008, at 11:53 AM, Christine Weibel wrote:
> 
>> 
>> Hmm.  mqlread did used to return a content-type of application/json,
>> but there was a deliberate change to text/plain a while ago.  it is
>> my recollection that was done for some browser compatibility issue?
>> perhaps alecf remembers this.
>> 
>> 
>> 
>> ----- Original Message -----
>> From: "Augusto Callejas" <acallejas at appliedminds.com>
>> To: "For discussions about MQL, Freebase API and apps built on
>> Freebase" <developers at freebase.com>
>> Sent: Thursday, September 18, 2008 11:39:29 AM (GMT-0800) America/
>> Los_Angeles
>> Subject: Re: [Developers] mqlread http response header (content-type)
>> 
>> according to the documenation:
>> 
>> http://www.freebase.com/view/guid/9202a8c04000641f800000000544e139
>> 
>> =====
>> 4.2.2. mqlread Output
>> 
>> mqlread returns an HTTP response with a Content-Type header of
>> application/json (or text/plain if the callback parameter was
>> specified).
>> The body of the response is a JSON-serialized envelope object that
>> holds a
>> MQL result object (or objects if multiple queries were submitted). The
>> format of mqlread response envelopes is specified in Section 4.2.3
>> =====
>> 
>> however i did not specify a callback parameter, so how do i get
>> mqlread to
>> return its response as "application/json" and not text/plain;
>> charset="utf-8".
>> 
>> thanks,
>> augusto.
>> 
>> 
>> On 9/17/08 9:36 AM, "Augusto Callejas" <acallejas at appliedminds.com>
>> wrote:
>> 
>>> hi-
>>> 
>>> when i perform a mqlread query, i get back HTTP response headers
>>> that look
>>> like:
>>> 
>>> =====
>>> Date: Wed, 17 Sep 2008 00:51:35 GMT
>>> ,
>>> Server: Apache
>>> ,
>>> X-Metaweb-Success: 1/1
>>> ,
>>> Content-Length: 35616
>>> ,
>>> Content-Type: text/plain; charset="utf-8"
>>> ,
>>> ...
>>> Connection: Keep-Alive
>>> =====
>>> 
>>> 
>>> shouldn't the "Content-Type" header value be "application/json"?
>>> 
>>> http://www.iana.org/assignments/media-types/application/
>>> 
>>> i'm having a problem with the 'charset="utf-8"' in the header.
>>> the java http client library that i'm using (
>>> http://hc.apache.org/httpclient-3.x/) reads the response (see example
>>> below), and decodes any unicode characters (ie. /u001a) into their
>>> actual
>>> character value.  however, this is before i get a chance to decode
>>> it in my
>>> json library.  however, the unicode characters have already been
>>> decoded at
>>> the http level, but not at the json level.
>>> 
>>> any thoughts?
>>> 
>>> thanks,
>>> augusto.
>>> 
>>> 
>>> query
>>> =====
>>> {"q":{"query":
>>> {
>>>  "master_property" : "/type/object/name",
>>>  "operation" : "delete",
>>>  "source" : {
>>>    "guid" : "#9202a8c04000641f8000000006e31736"
>>>  },
>>>  "target_value" : {
>>>    "value" : null
>>>  },
>>>  "timestamp" : "2008-08-30T18:56:23.0000Z",
>>>  "type" : "/type/link",
>>>  "valid" : null
>>> }
>>> }}
>>> =====
>>> 
>>> 
>>> response
>>> =====
>>> {
>>>  "master_property" : "/type/object/name",
>>>  "operation" : "delete",
>>>  "source" : {
>>>    "guid" : "#9202a8c04000641f8000000006e31736"
>>>  },
>>>  "target_value" : {
>>>    "value" : "Friesengeist 2: Regelm\u001aässige Zerstö\u001arungen"
>>>  },
>>>  "timestamp" : "2008-08-30T18:56:23.0000Z",
>>>  "type" : "/type/link",
>>>  "valid" : null
>>> }
>>> =====
>>> 
>>> 
>>> _______________________________________________
>>> Developers mailing list
>>> Developers at freebase.com
>>> http://lists.freebase.com/mailman/listinfo/developers
>> 
>> 
>> _______________________________________________
>> Developers mailing list
>> Developers at freebase.com
>> http://lists.freebase.com/mailman/listinfo/developers
>> 
> 
> _______________________________________________
> Developers mailing list
> Developers at freebase.com
> http://lists.freebase.com/mailman/listinfo/developers




More information about the Developers mailing list