SIB-Colombia / chigui

0 stars 1 forks source link

Primera versión API Catálogo 2.0 #9

Open nestorjal opened 8 years ago

nestorjal commented 8 years ago

@SIB-Colombia/ac-team @SIB-Colombia/core-developers @danipilze

Ya está definido el API, para los elementos:

Language Revision TaxonRecordName SynonymsAtomized CommonNamesAtomized Hierarchy BriefDescription FullDescription IdentificationKeys LifeForm LifeCycle

Una ficha nueva se crea sólo a través del elemento TaxonRecordName, la URL en este método post es:

urlprincipal/fichas/taxon_record_name/

Este devolverá como resultado un JSON con la información de la ficha creada:

{ "message": "Created a new Record and Save TaxonRecordNameVersion", "element": "TaxonRecordName", "version": 1, "_id": "56d925aead0067f614a523b0", "id_record": "56d925aead0067f614a523b1" }

Donde "_id" es el id del elemento TaxonRecordName y id_record es el id de la Ficha creada, el cual debe ser usado para poder hacer POST y GET de las nuevas versiones de los elementos a adicionar. Una nueva versión del elemento con el método POST tiene la siguiente URL:

url_principal/fichas/:id_record/nombre_elemento/

Donde ":id_record" es el id de la fciha en la cual se quiere guardar la version, y nombre_elemento es el nombre del elemento con division de las palabras en el nombre en minuscual y separado con raya al piso, por ejemplo:

localhost:8080/fichas/56d7ad5c04bcf8aa1ea8f5bc/common_names_atomized/

El body del POST en este JSON debe tener el siguiente modelo: { "id_user" : "01", "nombreElemento": "" / [] }

Donde el id_user es el id del usuario, y nombreElemento, así como el valor es el mismo, por ejemplo

{ "id_user" : "01", "commonNamesAtomized":[{ "name": "Knoblauch", "language": "Alemán", "usedIn": { "distributionScope": { "type": "", "ancillaryData": [] }, "temporalCoverage": { "startDate": "", "endDate": "" }, "distributionAtomizedBranch": [], "distributionUnstructured": "", "ancillaryData": [] }, "usedBy": "", "ancillaryData": [] }, { "name": "ail", "language": "Francés", "usedIn": { "distributionScope": { "type": "", "ancillaryData": [] }, "temporalCoverage": { "startDate": "", "endDate": "" }, "distributionAtomizedBranch": [], "distributionUnstructured": "", "ancillaryData": [] }, "usedBy": "", "ancillaryData": [] }] }

La respuesta de este método es:

{ "message": "Save ElementVersion", "element": "Element", "version": Numero version, "_id": "Id de la nueva version del elemento", "id_record": "id de la ficha en la cual se guardó la nueva version" }

Por ejemplo para BaseElements, la respuesta es

{ "message": "Saved BaseElementsVersion", "element": "BaseElements", "version": 2, "_id": "56d92789da823d4315c1ab3d", "id_record": "56d925aead0067f614a523b1" }

El método GET para obtener una versión específica del elemento de una ficha tiene la siguiente URL:

urlprincipal/fichas/:id_record/nombre_elemento/:version

Donde ":id_record" es el nombre de la ficha nombre_elemento, nombre separado por raya al piso y :versión el numero de la versión, el cual es un numero entero comenzando en 1 para la primera versión del elemento a consutar. Por ejemplo:

localhost:8080/fichas/56d90422bb817f940fc83ec3/associated_party/3

La respuesta es un JSON con la misma información que se registró con el método post, más la información del id de la ficha id de la versión, número de versión y fecha de creación

{ "_id": "56d904ffceeebfc20fb13cca", "__t": "AssociatedPartyVersion", "version": 3, "id_record": "56d90422bb817f940fc83ec3", "id_user": "01", "associatedParty": [ { "firstName": "Partes asociadas", "lastName": "Partes asociadas", "position": "Partes asociadas", "organisation": "Partes asociadas", "address": "Partes asociadas", "city": "Leticia", "state": "Amazonas", "country": "Colombia", "postalCode": "Partes asociadas", "phone": "Partes asociadas", "email": "Partes asociadas", "homepage": "Partes asociadas", "personnelDirectory": "", "personnelIdentifier": "", "role": "Partes asociadas", "_id": "56d904ffceeebfc20fb13ccb" } ], "created": "2016-03-04T03:46:07.000Z" }

valegrajales commented 8 years ago

Hola Oscar, hay un problema con el API. Las buenas practicas en construcción de API REST indican que nunca debe ir en la URL en un mensaje post datos del elementos que va a ser create (ids, o nombres de dichos elemento)

Por lo tanto: urlprincipal/fichas/taxon_record_name/ debe ser urlprincipal/fichas taxon_record_name debe hacer parte del contenido del mensaje (el JSON que contiene los datos de lo que quiere ser creado)

En el caso de una nueva versión del elemento se aplica la misma regla: url_principal/fichas/:id_record/nombre_elemento/ debe ser url_principal/fichas/:id_record El nombre de elemento debe ser parte del contenido JSON en el mensaje POST

Esto es muy importante si queremos seguir buenas prácticas en la construcción de API JSON.

Saludos