{"id":1498,"date":"2025-02-24T09:05:52","date_gmt":"2025-02-24T09:05:52","guid":{"rendered":"https:\/\/mariogr.com\/?p=1498"},"modified":"2026-11-03T07:49:08","modified_gmt":"2026-11-03T07:49:08","slug":"api-rest-para-gestion-hospitalaria","status":"publish","type":"portfolio","link":"https:\/\/mariogr.com\/index.php\/portfolio-archive\/api-rest-para-gestion-hospitalaria\/","title":{"rendered":"API REST para Gesti\u00f3n Hospitalaria"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"1498\" class=\"elementor elementor-1498\">\n\t\t\t\t<div class=\"elementor-element elementor-element-418e594 e-flex e-con-boxed e-con e-parent\" data-id=\"418e594\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-273d6b4 elementor-widget elementor-widget-heading\" data-id=\"273d6b4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Desarrollo de una API REST para Gesti\u00f3n Hospitalaria con Express, TypeScript y SQLite<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1cb372f elementor-widget elementor-widget-text-editor\" data-id=\"1cb372f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"313\" data-end=\"603\">Este proyecto consisti\u00f3 en el desarrollo del <strong data-start=\"358\" data-end=\"369\">backend<\/strong> para la gesti\u00f3n de un hospital, proporcionando una API REST para administrar pacientes, m\u00e9dicos, citas y registros m\u00e9dicos. Se implement\u00f3 utilizando <strong data-start=\"519\" data-end=\"530\">Node.js<\/strong> con <strong data-start=\"535\" data-end=\"559\">Express y TypeScript<\/strong>, junto con <strong data-start=\"571\" data-end=\"581\">SQLite<\/strong> como base de datos.<\/p><p data-start=\"605\" data-end=\"923\">El sistema incluye autenticaci\u00f3n con <strong data-start=\"642\" data-end=\"666\">JWT (JSON Web Token)<\/strong>, control de accesos basado en roles y operaciones CRUD completas. Para mejorar la modularidad y mantenibilidad del c\u00f3digo, se utiliz\u00f3 un <strong data-start=\"804\" data-end=\"845\">CLI para la inyecci\u00f3n de dependencias<\/strong>, facilitando la configuraci\u00f3n y gesti\u00f3n de m\u00f3dulos dentro de la aplicaci\u00f3n.<\/p><h2 data-start=\"925\" data-end=\"956\"><strong data-start=\"928\" data-end=\"954\">Tecnolog\u00edas Utilizadas<\/strong><\/h2><p data-start=\"958\" data-end=\"1070\">Para garantizar un desarrollo estructurado y escalable, se emplearon las siguientes tecnolog\u00edas en el backend:<\/p><ul data-start=\"1072\" data-end=\"1533\"><li data-start=\"1072\" data-end=\"1113\"><strong data-start=\"1074\" data-end=\"1085\">Node.js<\/strong> como entorno de ejecuci\u00f3n<\/li><li data-start=\"1114\" data-end=\"1182\"><strong data-start=\"1116\" data-end=\"1127\">Express<\/strong> como framework para la gesti\u00f3n de rutas y middleware<\/li><li data-start=\"1183\" data-end=\"1252\"><strong data-start=\"1185\" data-end=\"1199\">TypeScript<\/strong> para mejorar la mantenibilidad y tipado del c\u00f3digo<\/li><li data-start=\"1253\" data-end=\"1304\"><strong data-start=\"1255\" data-end=\"1265\">SQLite<\/strong> como base de datos embebida y ligera<\/li><li data-start=\"1305\" data-end=\"1385\"><strong data-start=\"1307\" data-end=\"1345\">CLI para inyecci\u00f3n de dependencias<\/strong>, mejorando la modularidad del sistema<\/li><li data-start=\"1386\" data-end=\"1423\"><strong data-start=\"1388\" data-end=\"1395\">JWT<\/strong> para autenticaci\u00f3n segura<\/li><li data-start=\"1424\" data-end=\"1471\"><strong data-start=\"1426\" data-end=\"1436\">bcrypt<\/strong> para encriptaci\u00f3n de contrase\u00f1as<\/li><li data-start=\"1472\" data-end=\"1533\"><strong data-start=\"1474\" data-end=\"1494\">Jest y Supertest<\/strong> para pruebas unitarias e integraci\u00f3n<\/li><\/ul><h2 data-start=\"1535\" data-end=\"1577\"><strong data-start=\"1538\" data-end=\"1575\">Inyecci\u00f3n de Dependencias con CLI<\/strong><\/h2><p data-start=\"1579\" data-end=\"1819\">En lugar de utilizar Prisma ORM, se opt\u00f3 por una <strong data-start=\"1628\" data-end=\"1690\">estructura basada en CLI para la inyecci\u00f3n de dependencias<\/strong>. Este enfoque permite una mejor organizaci\u00f3n del c\u00f3digo y facilita la configuraci\u00f3n de m\u00f3dulos reutilizables dentro de la API.<\/p><p data-start=\"1821\" data-end=\"2010\">Mediante el uso de un CLI, se gestionan las dependencias de manera centralizada, asegurando que cada servicio pueda ser inyectado donde sea necesario sin acoplar directamente los m\u00f3dulos.<\/p><h2 data-start=\"2012\" data-end=\"2055\"><strong data-start=\"2015\" data-end=\"2053\">Autenticaci\u00f3n y Control de Accesos<\/strong><\/h2><p data-start=\"2057\" data-end=\"2235\">El backend implementa autenticaci\u00f3n con <strong data-start=\"2097\" data-end=\"2104\">JWT<\/strong>, protegiendo los endpoints y asegurando que cada solicitud est\u00e9 correctamente autenticada y autorizada seg\u00fan el rol del usuario.<\/p><p data-start=\"2237\" data-end=\"2268\">Los roles definidos incluyen:<\/p><ul data-start=\"2270\" data-end=\"2524\"><li data-start=\"2270\" data-end=\"2362\"><strong data-start=\"2272\" data-end=\"2289\">Administrador<\/strong>, con permisos para gestionar usuarios, especialidades y departamentos.<\/li><li data-start=\"2363\" data-end=\"2439\"><strong data-start=\"2365\" data-end=\"2375\">M\u00e9dico<\/strong>, con acceso a la administraci\u00f3n de citas y registros m\u00e9dicos.<\/li><li data-start=\"2440\" data-end=\"2524\"><strong data-start=\"2442\" data-end=\"2454\">Paciente<\/strong>, con permisos para consultar su historial m\u00e9dico y programar citas.<\/li><\/ul><p data-start=\"2526\" data-end=\"2690\">Un middleware de autenticaci\u00f3n se encarga de verificar el token en cada solicitud y restringir el acceso a los recursos protegidos seg\u00fan los permisos del usuario.<\/p><h2 data-start=\"2692\" data-end=\"2724\"><strong data-start=\"2695\" data-end=\"2722\">Endpoints Implementados<\/strong><\/h2><p data-start=\"2726\" data-end=\"2806\">El backend expone una API REST con las siguientes funcionalidades principales:<\/p><ul data-start=\"2808\" data-end=\"3155\"><li data-start=\"2808\" data-end=\"2880\"><strong data-start=\"2810\" data-end=\"2833\">Gesti\u00f3n de usuarios<\/strong>, incluyendo autenticaci\u00f3n y control de roles<\/li><li data-start=\"2881\" data-end=\"2926\"><strong data-start=\"2883\" data-end=\"2924\">Administraci\u00f3n de m\u00e9dicos y pacientes<\/strong><\/li><li data-start=\"2927\" data-end=\"2988\"><strong data-start=\"2929\" data-end=\"2986\">Creaci\u00f3n, modificaci\u00f3n y cancelaci\u00f3n de citas m\u00e9dicas<\/strong><\/li><li data-start=\"2989\" data-end=\"3083\"><strong data-start=\"2991\" data-end=\"3022\">Manejo de registros m\u00e9dicos<\/strong>, almacenando diagn\u00f3sticos, prescripciones y notas cl\u00ednicas<\/li><li data-start=\"3084\" data-end=\"3155\"><strong data-start=\"3086\" data-end=\"3127\">Consulta de disponibilidad de m\u00e9dicos<\/strong> y asignaci\u00f3n de pacientes<\/li><\/ul><p data-start=\"3157\" data-end=\"3291\">Todos los endpoints han sido protegidos con middleware de autenticaci\u00f3n y validaciones de permisos para garantizar el acceso seguro.<\/p><h2 data-start=\"3293\" data-end=\"3336\"><strong data-start=\"3296\" data-end=\"3334\">Pruebas de Integraci\u00f3n y Unitarias<\/strong><\/h2><p data-start=\"3338\" data-end=\"3471\">Se implementaron <strong data-start=\"3355\" data-end=\"3393\">pruebas unitarias y de integraci\u00f3n<\/strong> con <strong data-start=\"3398\" data-end=\"3418\">Jest y Supertest<\/strong> para validar el correcto funcionamiento de la API.<\/p><p data-start=\"3473\" data-end=\"3496\">Las pruebas incluyen:<\/p><ul data-start=\"3498\" data-end=\"3757\"><li data-start=\"3498\" data-end=\"3561\">Verificaci\u00f3n del flujo de autenticaci\u00f3n y generaci\u00f3n de JWT<\/li><li data-start=\"3562\" data-end=\"3625\">Validaci\u00f3n del control de accesos y restricciones por roles<\/li><li data-start=\"3626\" data-end=\"3692\">Pruebas de CRUD en la gesti\u00f3n de usuarios, m\u00e9dicos y pacientes<\/li><li data-start=\"3693\" data-end=\"3757\">Evaluaci\u00f3n de la administraci\u00f3n de citas y registros m\u00e9dicos<\/li><\/ul><p data-start=\"3759\" data-end=\"3888\">Estas pruebas garantizan la estabilidad del backend y permiten detectar errores antes de desplegar en un entorno de producci\u00f3n.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4b29d11 elementor-widget elementor-widget-image\" data-id=\"4b29d11\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/mariogr.com\/wp-content\/uploads\/2025\/02\/rest.png\" title=\"\" alt=\"\" loading=\"lazy\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"featured_media":1586,"menu_order":0,"template":"","portfolio_categories":[47,53],"portfolio_tags":[61,27,60,59,36,54],"class_list":["post-1498","portfolio","type-portfolio","status-publish","has-post-thumbnail","hentry","portfolio_categories-informatica","portfolio_categories-web","portfolio_tags-api","portfolio_tags-app","portfolio_tags-express","portfolio_tags-nodejs","portfolio_tags-software","portfolio_tags-web"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>API REST para Gesti\u00f3n Hospitalaria - Mario Gonz\u00e1lez<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/mariogr.com\/index.php\/portfolio-archive\/api-rest-para-gestion-hospitalaria\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"API REST para Gesti\u00f3n Hospitalaria - Mario Gonz\u00e1lez\" \/>\n<meta property=\"og:url\" content=\"https:\/\/mariogr.com\/index.php\/portfolio-archive\/api-rest-para-gestion-hospitalaria\/\" \/>\n<meta property=\"og:site_name\" content=\"Mario Gonz\u00e1lez\" \/>\n<meta property=\"article:modified_time\" content=\"2026-11-03T07:49:08+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/mariogr.com\/wp-content\/uploads\/2025\/02\/gestion-hospitalaria.png\" \/>\n\t<meta property=\"og:image:width\" content=\"639\" \/>\n\t<meta property=\"og:image:height\" content=\"390\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minuto\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/mariogr.com\\\/index.php\\\/portfolio-archive\\\/api-rest-para-gestion-hospitalaria\\\/\",\"url\":\"https:\\\/\\\/mariogr.com\\\/index.php\\\/portfolio-archive\\\/api-rest-para-gestion-hospitalaria\\\/\",\"name\":\"API REST para Gesti\u00f3n Hospitalaria - Mario Gonz\u00e1lez\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mariogr.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/mariogr.com\\\/index.php\\\/portfolio-archive\\\/api-rest-para-gestion-hospitalaria\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/mariogr.com\\\/index.php\\\/portfolio-archive\\\/api-rest-para-gestion-hospitalaria\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/mariogr.com\\\/wp-content\\\/uploads\\\/2025\\\/02\\\/gestion-hospitalaria.png\",\"datePublished\":\"2025-02-24T09:05:52+00:00\",\"dateModified\":\"2026-11-03T07:49:08+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/mariogr.com\\\/index.php\\\/portfolio-archive\\\/api-rest-para-gestion-hospitalaria\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/mariogr.com\\\/index.php\\\/portfolio-archive\\\/api-rest-para-gestion-hospitalaria\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/mariogr.com\\\/index.php\\\/portfolio-archive\\\/api-rest-para-gestion-hospitalaria\\\/#primaryimage\",\"url\":\"https:\\\/\\\/mariogr.com\\\/wp-content\\\/uploads\\\/2025\\\/02\\\/gestion-hospitalaria.png\",\"contentUrl\":\"https:\\\/\\\/mariogr.com\\\/wp-content\\\/uploads\\\/2025\\\/02\\\/gestion-hospitalaria.png\",\"width\":639,\"height\":390},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/mariogr.com\\\/index.php\\\/portfolio-archive\\\/api-rest-para-gestion-hospitalaria\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/mariogr.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Portfolio\",\"item\":\"https:\\\/\\\/mariogr.com\\\/index.php\\\/portfolio-archive\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"API REST para Gesti\u00f3n Hospitalaria\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/mariogr.com\\\/#website\",\"url\":\"https:\\\/\\\/mariogr.com\\\/\",\"name\":\"Mario Gonz\u00e1lez\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/mariogr.com\\\/#\\\/schema\\\/person\\\/eb8233b36ab81d794487c9dabf5099ec\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/mariogr.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/mariogr.com\\\/#\\\/schema\\\/person\\\/eb8233b36ab81d794487c9dabf5099ec\",\"name\":\"Mario Gonz\u00e1lez\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fd530be9d9f1f94c4f61cde6df1335bd8ac6fcc3f83a362eb0911f10b6f91d25?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fd530be9d9f1f94c4f61cde6df1335bd8ac6fcc3f83a362eb0911f10b6f91d25?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fd530be9d9f1f94c4f61cde6df1335bd8ac6fcc3f83a362eb0911f10b6f91d25?s=96&d=mm&r=g\",\"caption\":\"Mario Gonz\u00e1lez\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fd530be9d9f1f94c4f61cde6df1335bd8ac6fcc3f83a362eb0911f10b6f91d25?s=96&d=mm&r=g\"},\"sameAs\":[\"https:\\\/\\\/mariogr.com\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/mariogr99\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"API REST para Gesti\u00f3n Hospitalaria - Mario Gonz\u00e1lez","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/mariogr.com\/index.php\/portfolio-archive\/api-rest-para-gestion-hospitalaria\/","og_locale":"es_ES","og_type":"article","og_title":"API REST para Gesti\u00f3n Hospitalaria - Mario Gonz\u00e1lez","og_url":"https:\/\/mariogr.com\/index.php\/portfolio-archive\/api-rest-para-gestion-hospitalaria\/","og_site_name":"Mario Gonz\u00e1lez","article_modified_time":"2026-11-03T07:49:08+00:00","og_image":[{"width":639,"height":390,"url":"https:\/\/mariogr.com\/wp-content\/uploads\/2025\/02\/gestion-hospitalaria.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Tiempo de lectura":"1 minuto"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/mariogr.com\/index.php\/portfolio-archive\/api-rest-para-gestion-hospitalaria\/","url":"https:\/\/mariogr.com\/index.php\/portfolio-archive\/api-rest-para-gestion-hospitalaria\/","name":"API REST para Gesti\u00f3n Hospitalaria - Mario Gonz\u00e1lez","isPartOf":{"@id":"https:\/\/mariogr.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/mariogr.com\/index.php\/portfolio-archive\/api-rest-para-gestion-hospitalaria\/#primaryimage"},"image":{"@id":"https:\/\/mariogr.com\/index.php\/portfolio-archive\/api-rest-para-gestion-hospitalaria\/#primaryimage"},"thumbnailUrl":"https:\/\/mariogr.com\/wp-content\/uploads\/2025\/02\/gestion-hospitalaria.png","datePublished":"2025-02-24T09:05:52+00:00","dateModified":"2026-11-03T07:49:08+00:00","breadcrumb":{"@id":"https:\/\/mariogr.com\/index.php\/portfolio-archive\/api-rest-para-gestion-hospitalaria\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/mariogr.com\/index.php\/portfolio-archive\/api-rest-para-gestion-hospitalaria\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/mariogr.com\/index.php\/portfolio-archive\/api-rest-para-gestion-hospitalaria\/#primaryimage","url":"https:\/\/mariogr.com\/wp-content\/uploads\/2025\/02\/gestion-hospitalaria.png","contentUrl":"https:\/\/mariogr.com\/wp-content\/uploads\/2025\/02\/gestion-hospitalaria.png","width":639,"height":390},{"@type":"BreadcrumbList","@id":"https:\/\/mariogr.com\/index.php\/portfolio-archive\/api-rest-para-gestion-hospitalaria\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/mariogr.com\/"},{"@type":"ListItem","position":2,"name":"Portfolio","item":"https:\/\/mariogr.com\/index.php\/portfolio-archive\/"},{"@type":"ListItem","position":3,"name":"API REST para Gesti\u00f3n Hospitalaria"}]},{"@type":"WebSite","@id":"https:\/\/mariogr.com\/#website","url":"https:\/\/mariogr.com\/","name":"Mario Gonz\u00e1lez","description":"","publisher":{"@id":"https:\/\/mariogr.com\/#\/schema\/person\/eb8233b36ab81d794487c9dabf5099ec"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/mariogr.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":["Person","Organization"],"@id":"https:\/\/mariogr.com\/#\/schema\/person\/eb8233b36ab81d794487c9dabf5099ec","name":"Mario Gonz\u00e1lez","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/fd530be9d9f1f94c4f61cde6df1335bd8ac6fcc3f83a362eb0911f10b6f91d25?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/fd530be9d9f1f94c4f61cde6df1335bd8ac6fcc3f83a362eb0911f10b6f91d25?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/fd530be9d9f1f94c4f61cde6df1335bd8ac6fcc3f83a362eb0911f10b6f91d25?s=96&d=mm&r=g","caption":"Mario Gonz\u00e1lez"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/fd530be9d9f1f94c4f61cde6df1335bd8ac6fcc3f83a362eb0911f10b6f91d25?s=96&d=mm&r=g"},"sameAs":["https:\/\/mariogr.com","https:\/\/www.linkedin.com\/in\/mariogr99\/"]}]}},"_links":{"self":[{"href":"https:\/\/mariogr.com\/index.php\/wp-json\/wp\/v2\/portfolio\/1498","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mariogr.com\/index.php\/wp-json\/wp\/v2\/portfolio"}],"about":[{"href":"https:\/\/mariogr.com\/index.php\/wp-json\/wp\/v2\/types\/portfolio"}],"version-history":[{"count":2,"href":"https:\/\/mariogr.com\/index.php\/wp-json\/wp\/v2\/portfolio\/1498\/revisions"}],"predecessor-version":[{"id":1588,"href":"https:\/\/mariogr.com\/index.php\/wp-json\/wp\/v2\/portfolio\/1498\/revisions\/1588"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mariogr.com\/index.php\/wp-json\/wp\/v2\/media\/1586"}],"wp:attachment":[{"href":"https:\/\/mariogr.com\/index.php\/wp-json\/wp\/v2\/media?parent=1498"}],"wp:term":[{"taxonomy":"portfolio_categories","embeddable":true,"href":"https:\/\/mariogr.com\/index.php\/wp-json\/wp\/v2\/portfolio_categories?post=1498"},{"taxonomy":"portfolio_tags","embeddable":true,"href":"https:\/\/mariogr.com\/index.php\/wp-json\/wp\/v2\/portfolio_tags?post=1498"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}