Record API


============
 Record API
============

The search module exposes records via `/record` URLs.  You can
manipulate URL parameters to alter output format in order to return
interesting information in API like manner.

1. XML API
==========

Syntax:

   GET /record/?of=...&ot=...

Parameters:

   of = output format (e.g. `xm` for MARCXML)
   ot = output tags (e.g. `` to get all fields, `100` to get titles only)

Pros:

   Eesy web search -> API search context switch.  Uses the same
   parameters as in visible UI.

Cons:

   The XML API output covers only MARC metadata.

Notes:

   The master format of Invenio records is usually MARC.  Hence
   chances are you would like to use `of=xm` output format parameter
   in your XML API queries in order to get the richest data.

Example: (return only record ID, first author, and title of a record)

   GET /record/451647?of=xm&ot=100,245

   <?xml version="1.0" encoding="UTF-8"?>
   <collection xmlns="http://www.loc.gov/MARC21/slim">
   <record>
     <controlfield tag="001">451647</controlfield>
     <datafield tag="100" ind1=" " ind2=" ">
       <subfield code="a">Maldacena, Juan Martin</subfield>
       <subfield code="i">INSPIRE-00304313</subfield>
       <subfield code="u">Harvard U.</subfield>
     </datafield>
     <datafield tag="245" ind1=" " ind2=" ">
       <subfield code="a">The Large N limit of..</subfield>
     </datafield>
   </record>
   </collection>

2. JSON API
===========

Syntax:

   GET /record/?of=...&ot=...

Parameters:

   of = output format (e.g. `recjson` for JSON)
   ot = output tags (e.g. `` to get all fields, `number_of_citations` to get citation counts only)

Pros:

   The JSON API cover field abstraction (support for virtual fields,
   e.g.  number of citations or book circulation counts) as well as
   master format abstraction (e.g. UNIMARC, EAD).

Cons:

   May be slow at times if `recjson` is not cached on the server.
   (See `CFG_BIBUPLOAD_SERIALIZE_RECORD_STRUCTURE`.)

   Not yet REST-ified; just an evolution of HTTP XML API described
   above.

Example: (getting citation counts)

   GET /record/451647?of=recjson&ot=recid,number_of_citations,authors,title

   {
     "recid": 451647,
     "number_of_citations": 9739,
     "authors": [{
         "INSPIRE_number": "INSPIRE-00304313",
         "affiliation": "Harvard U.",
         "first_name": "Juan Martin",
         "last_name": "Maldacena",
         "full_name": "Maldacena, Juan Martin"
     }],
     "title": {
        "title": "The Large N limit of ... ity"
     }
   }

3. Python API
=============

Signature:

   def get_record(recID)

Signature:

   def print_record(recID, format='hb', ot='', ...)