{"id":1289,"date":"2021-11-16T16:19:53","date_gmt":"2021-11-16T19:19:53","guid":{"rendered":"https:\/\/fcnuvem.com.br\/home\/?p=1289"},"modified":"2022-12-05T11:57:52","modified_gmt":"2022-12-05T14:57:52","slug":"blog-parte-1-crie-uma-api-rest-em-nodejs-typescript","status":"publish","type":"post","link":"https:\/\/fcamara.com\/blog\/blog-parte-1-crie-uma-api-rest-em-nodejs-typescript\/","title":{"rendered":"Parte 1 &#8211; Crie uma API REST em NodeJS + TypeScript"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/fcamara.com\/blog\/wp-content\/uploads\/2021\/11\/Blog-730x205-FCnuvem-APIrest-2.png\" alt=\"\" class=\"wp-image-1352\"\/><\/figure>\n\n\n\n<p><sub><strong>Autora:<\/strong>&nbsp;Jakeliny&nbsp;Gracielly&nbsp;<\/sub><\/p>\n\n\n\n<p>Nesse tutorial&nbsp;vamos&nbsp;criar&nbsp;uma&nbsp;API RESTful&nbsp;em&nbsp;NodeJS&nbsp;utilizando&nbsp;typescript,&nbsp;vamos&nbsp;usar o&nbsp;exemplo&nbsp;de&nbsp;gerenciar&nbsp;clientes&nbsp;ao&nbsp;concluir&nbsp;vamos&nbsp;conseguir&nbsp;inserir,&nbsp;editar,&nbsp;deletar&nbsp;e&nbsp;listar&nbsp;os&nbsp;clientes. Vamos&nbsp;l\u00e1&nbsp;ent\u00e3o!&nbsp;<\/p>\n\n\n\n<p><strong>O<\/strong><a href=\"http:\/\/bit.ly\/2D4gbJi\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>&nbsp;que vamos usar?<\/strong><\/a><strong><\/strong>&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>NodeJS&nbsp;<\/li><li>NPM&nbsp;<\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li>TypeScript&nbsp;<\/li><li>MongoDB&nbsp;<\/li><li>Postman&nbsp;<\/li><\/ul>\n\n\n\n<p>Dentro do terminal do NodeJS&nbsp;vamos&nbsp;iniciar&nbsp;nosso&nbsp;projeto&nbsp;criando&nbsp;uma&nbsp;pasta com o&nbsp;nome:&nbsp;<strong>clients&nbsp;<\/strong>e&nbsp;vamos&nbsp;entrar&nbsp;nessa&nbsp;pasta com o&nbsp;comando&nbsp;<strong>cd<\/strong>&nbsp;<\/p>\n\n\n\n<p>mkdir&nbsp;clients &amp;&amp; cd clients&nbsp;<\/p>\n\n\n\n<p>Vamos&nbsp;iniciar&nbsp;o&nbsp;projeto&nbsp;com o commando:&nbsp;npm&nbsp;init&nbsp;<\/p>\n\n\n\n<p>Ir\u00e3o&nbsp;aparecer&nbsp;algumas&nbsp;perguntas:&nbsp;<\/p>\n\n\n\n<p><strong>name: (clients)<\/strong>&nbsp;<\/p>\n\n\n\n<p><strong>version: (1.0.0)<\/strong>&nbsp;<\/p>\n\n\n\n<p><strong>description:&nbsp;<\/strong>&nbsp;<\/p>\n\n\n\n<p><strong>entry point: (index.js)&nbsp;server.ts<\/strong>&nbsp;<\/p>\n\n\n\n<p><strong>test command:&nbsp;<\/strong>&nbsp;<\/p>\n\n\n\n<p><strong>git repository:<\/strong>&nbsp;<\/p>\n\n\n\n<p><strong>keywords:&nbsp;<\/strong>&nbsp;<\/p>\n\n\n\n<p><strong>author:&nbsp;Jakeliny&nbsp;Gracielly<\/strong>&nbsp;<\/p>\n\n\n\n<p><strong>license: (ISC)<\/strong>&nbsp;<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Os&nbsp;valores&nbsp;que&nbsp;aparecem&nbsp;entre&nbsp;par\u00eanteses&nbsp;s\u00e3o&nbsp;os&nbsp;valores&nbsp;default, se nada for&nbsp;digitado&nbsp;o valor entre&nbsp;par\u00eanteses&nbsp;ser\u00e1&nbsp;preenchido&nbsp;<\/li><\/ol>\n\n\n\n<ol class=\"wp-block-list\" start=\"2\"><li>Na&nbsp;pergunta&nbsp;entry point,&nbsp;vamos&nbsp;colocar&nbsp;<strong>server.ts&nbsp;<\/strong>ser\u00e1&nbsp;nosso&nbsp;arquivo&nbsp;de&nbsp;partida&nbsp;<\/li><\/ol>\n\n\n\n<ol class=\"wp-block-list\" start=\"3\"><li>Em&nbsp;author&nbsp;vamos&nbsp;colocar&nbsp;nosso&nbsp;nome&nbsp;<\/li><\/ol>\n\n\n\n<p>Vamos&nbsp;instalar&nbsp;os&nbsp;pacotes&nbsp;necess\u00e1rios&nbsp;para&nbsp;nossa&nbsp;API&nbsp;funcionar:&nbsp;<\/p>\n\n\n\n<p>npm&nbsp;install body-parser express mongoose&nbsp;<\/p>\n\n\n\n<p>Esse&nbsp;comando&nbsp;vai&nbsp;instalar&nbsp;as&nbsp;depend\u00eancias&nbsp;do&nbsp;projeto&nbsp;e&nbsp;gravar&nbsp;no&nbsp;package.json,&nbsp;n\u00e3o&nbsp;\u00e9&nbsp;necess\u00e1rio&nbsp;colocar&nbsp;-S&nbsp;ou&nbsp;&#8211;save, a&nbsp;partir&nbsp;da&nbsp;vers\u00e3o&nbsp;5.0.0 do NodeJS&nbsp;os&nbsp;m\u00f3dulos&nbsp;s\u00e3o&nbsp;gravados&nbsp;automaticamente&nbsp;<br>&nbsp;<br>Express \u00e9 o framework que&nbsp;vamos&nbsp;usar, body-parser \u00e9 o&nbsp;m\u00f3dulo&nbsp;que&nbsp;vai&nbsp;transformar&nbsp;as entradas e&nbsp;sa\u00eddas&nbsp;em&nbsp;Json e mongoose&nbsp;faz&nbsp;a&nbsp;conex\u00e3o&nbsp;com o MongoDB&nbsp;<\/p>\n\n\n\n<p>Vamos&nbsp;instalar&nbsp;os&nbsp;pacotes&nbsp;necess\u00e1rios&nbsp;para&nbsp;desenvolvimento,&nbsp;s\u00e3o&nbsp;eles: typescript e o&nbsp;m\u00f3dulo&nbsp;typescript dos&nbsp;pacotes&nbsp;instalados&nbsp;no&nbsp;passo&nbsp;anterior:&nbsp;<\/p>\n\n\n\n<p>npm&nbsp;install @types\/body-parser @types\/express @types\/mongoose @types\/node&nbsp;ts-node typescript -D&nbsp;<\/p>\n\n\n\n<p>O -D no final do&nbsp;comando&nbsp;\u00e9&nbsp;igual&nbsp;a &#8211;only=dev, que&nbsp;salva&nbsp;os&nbsp;pacotes&nbsp;no&nbsp;package.json&nbsp;como&nbsp;depend\u00eancia&nbsp;para&nbsp;desenvolvimento&nbsp;<\/p>\n\n\n\n<p>Abra&nbsp;sua&nbsp;IDE&nbsp;favorita&nbsp;e&nbsp;abra&nbsp;o&nbsp;arquivo&nbsp;que&nbsp;foi&nbsp;criado&nbsp;package.json&nbsp;observe que&nbsp;os&nbsp;dados&nbsp;inseridos&nbsp;nas&nbsp;perguntas&nbsp;e&nbsp;os&nbsp;pacotes&nbsp;instalados&nbsp;est\u00e3o&nbsp;todos&nbsp;referenciados.&nbsp;<\/p>\n\n\n\n<p>Agora&nbsp;vamos&nbsp;configurar&nbsp;o&nbsp;compilador&nbsp;do typescript,&nbsp;crie&nbsp;um&nbsp;arquivo&nbsp;na&nbsp;raiz&nbsp;da pasta do&nbsp;nosso&nbsp;projeto&nbsp;com o&nbsp;nome&nbsp;tsconfig.json&nbsp;e&nbsp;adicione&nbsp;o&nbsp;conte\u00fado:&nbsp;<\/p>\n\n\n\n<p>{&nbsp;<\/p>\n\n\n\n<p>&#8220;compilerOptions&#8221;:{&nbsp;<\/p>\n\n\n\n<p>&#8220;target&#8221;: &#8220;es5&#8221;,&nbsp;<\/p>\n\n\n\n<p>&#8220;module&#8221;: &#8220;commonjs&#8221;,&nbsp;<\/p>\n\n\n\n<p>&#8220;outDir&#8221;: &#8220;build&#8221;,&nbsp;<\/p>\n\n\n\n<p>&#8220;typeRoots&#8221;: [&nbsp;<\/p>\n\n\n\n<p>&#8220;..\/node_modules\/@types&#8221;&nbsp;<\/p>\n\n\n\n<p>],&nbsp;<\/p>\n\n\n\n<p>&#8220;types&#8221;: [&nbsp;<\/p>\n\n\n\n<p>&#8220;node&#8221;&nbsp;<\/p>\n\n\n\n<p>]&nbsp;<\/p>\n\n\n\n<p>},&nbsp;<\/p>\n\n\n\n<p>&#8220;include&#8221;: [&nbsp;<\/p>\n\n\n\n<p>&#8220;server\/**\/*.ts&#8221;,&nbsp;<\/p>\n\n\n\n<p>&#8220;server\/*.ts&#8221;&nbsp;<\/p>\n\n\n\n<p>],&nbsp;<\/p>\n\n\n\n<p>&#8220;exclude&#8221;: [&nbsp;<\/p>\n\n\n\n<p>&#8220;node_modules&#8221;&nbsp;<\/p>\n\n\n\n<p>],&nbsp;<\/p>\n\n\n\n<p>&#8220;compileOnSave&#8221;: true,&nbsp;<\/p>\n\n\n\n<p>&#8220;buildOnSave&#8221;: true&nbsp;<\/p>\n\n\n\n<p>}&nbsp;<\/p>\n\n\n\n<p>Nesse&nbsp;arquivo&nbsp;estamos:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Colocando&nbsp;as&nbsp;op\u00e7\u00f5es&nbsp;de&nbsp;compila\u00e7\u00e3o&nbsp;do Type Script,&nbsp;queremos&nbsp;que&nbsp;ele&nbsp;transcreva&nbsp;todo&nbsp;o&nbsp;conte\u00fado&nbsp;para ES5&nbsp;usando&nbsp;o&nbsp;m\u00f3dulo&nbsp;commonjs&nbsp;e passe&nbsp;tudo&nbsp;para a pasta build.&nbsp;<\/li><li>Inclu\u00edmos&nbsp;os&nbsp;arquivos&nbsp;da&nbsp;nossa&nbsp;futura&nbsp;pasta server e&nbsp;os&nbsp;arquivos&nbsp;de&nbsp;suas&nbsp;subpastas&nbsp;<\/li><li>Deixamos&nbsp;de fora da&nbsp;compila\u00e7\u00e3o&nbsp;os&nbsp;arquivos&nbsp;da&nbsp;node_modules&nbsp;<\/li><li>&nbsp;Por&nbsp;\u00faltimo&nbsp;dizemos&nbsp;que&nbsp;quando&nbsp;salvarmos&nbsp;algum&nbsp;arquivo&nbsp;.ts&nbsp;o typescript ja&nbsp;compila&nbsp;e \u201cbuilda\u201d&nbsp;esses&nbsp;arquivos&nbsp;<\/li><\/ul>\n\n\n\n<p>Vamos&nbsp;criar&nbsp;a pasta server:&nbsp;<\/p>\n\n\n\n<p>mkdir&nbsp;server&nbsp;<\/p>\n\n\n\n<p>Vamos&nbsp;criar&nbsp;os&nbsp;arquivos&nbsp;app.ts&nbsp;e&nbsp;server.ts&nbsp;dentro da pasta server:&nbsp;<\/p>\n\n\n\n<p>touch server\/{app,server}.ts&nbsp;<\/p>\n\n\n\n<p>Vamos&nbsp;abrir&nbsp;o&nbsp;arquivo&nbsp;app.ts&nbsp;em&nbsp;nossa&nbsp;IDE e&nbsp;colocar&nbsp;o&nbsp;conte\u00fado:&nbsp;<\/p>\n\n\n\n<p>import * as express from &#8216;express&#8217;;&nbsp;<br>&nbsp;<\/p>\n\n\n\n<p>class&nbsp;App{&nbsp;<\/p>\n\n\n\n<p>public app:&nbsp;express.Application;&nbsp;<br>&nbsp;<\/p>\n\n\n\n<p>constructor(){&nbsp;<\/p>\n\n\n\n<p>&nbsp;this.app&nbsp;=&nbsp;express();&nbsp;<\/p>\n\n\n\n<p>&nbsp;this.routes();&nbsp;<\/p>\n\n\n\n<p>}&nbsp;<\/p>\n\n\n\n<p>routes(){&nbsp;<\/p>\n\n\n\n<p>&nbsp;this.app.route(&#8216;\/&#8217;).get((req, res) =&gt;&nbsp;res.status(200).json({ &#8216;message&#8217;: &#8216;Hello world!&#8217; }));&nbsp;<\/p>\n\n\n\n<p>}&nbsp;<\/p>\n\n\n\n<p>}&nbsp;<\/p>\n\n\n\n<p>export default new&nbsp;App();&nbsp;<\/p>\n\n\n\n<p>Agora no&nbsp;arquivo&nbsp;server.ts&nbsp;e&nbsp;configurar&nbsp;para&nbsp;nossa&nbsp;aplica\u00e7\u00e3o&nbsp;rodar&nbsp;na&nbsp;porta 5000&nbsp;<\/p>\n\n\n\n<p>import App from&nbsp;&#8216;.\/app&#8217;;&nbsp;<\/p>\n\n\n\n<p>App.app.listen(5000, () =&gt;&nbsp;console.log(&#8216;servidor&nbsp;rodando, porta: 5000&#8217;));&nbsp;<\/p>\n\n\n\n<p>Agora&nbsp;nosso&nbsp;servidor&nbsp;est\u00e1&nbsp;pronto,&nbsp;vamos&nbsp;fazer&nbsp;uma&nbsp;pequena&nbsp;configura\u00e7\u00e3o&nbsp;no&nbsp;<strong>package.json<\/strong>,&nbsp;vamos&nbsp;localizar&nbsp;a&nbsp;linha&nbsp;onde&nbsp;est\u00e1&nbsp;o&nbsp;comando&nbsp;script: {\u2026} e&nbsp;adicionamos&nbsp;dentro da&nbsp;chave&nbsp;comando&nbsp;\u201cstart\u201d&nbsp;<\/p>\n\n\n\n<p>&#8220;scripts&#8221;: {&nbsp;<\/p>\n\n\n\n<p>&#8220;test&#8221;: &#8220;echo \\&#8221;Error: no test specified\\&#8221; &amp;&amp; exit 1&#8243;,&nbsp;<\/p>\n\n\n\n<p>&#8220;start&#8221;: &#8220;NODE_ENV=development .\/node_modules\/.bin\/ts-node .\/server\/server.ts&#8221;&nbsp;<\/p>\n\n\n\n<p>},&nbsp;<\/p>\n\n\n\n<p>Agora no terminal&nbsp;do&nbsp;Node dentro da pasta do&nbsp;projeto&nbsp;vamos&nbsp;rodar&nbsp;o&nbsp;comando:&nbsp;<\/p>\n\n\n\n<p>npm&nbsp;start&nbsp;<\/p>\n\n\n\n<p>Se&nbsp;n\u00e3o&nbsp;der&nbsp;nenhum&nbsp;erro,&nbsp;abra&nbsp;o&nbsp;endere\u00e7o&nbsp;<a href=\"http:\/\/localhost:4200\/\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/localhost:<\/a>&nbsp;5000 no&nbsp;seu&nbsp;navegador&nbsp;preferido,&nbsp;voc\u00ea&nbsp;deve&nbsp;conseguir&nbsp;ver&nbsp;o&nbsp;resultado&nbsp;a&nbsp;seguir:&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/c1h-word-edit-15.cdn.office.net\/we\/s\/hA3596C17DAD9A003_resources\/1046\/progress.gif\" alt=\"\"\/><\/figure>\n\n\n\n<p>Nosso&nbsp;server&nbsp;est\u00e1&nbsp;respondendo&nbsp;e&nbsp;funcionando&nbsp;sem&nbsp;erros, no&nbsp;pr\u00f3ximo&nbsp;artigo&nbsp;vamos&nbsp;come\u00e7ar&nbsp;a&nbsp;desenvolver&nbsp;nossas&nbsp;fun\u00e7\u00f5es?&nbsp;<\/p>\n\n\n\n<p>Aguarde&nbsp;o&nbsp;post&nbsp;da&nbsp;segunda&nbsp;parte.&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Autora:&nbsp;Jakeliny&nbsp;Gracielly&nbsp; Nesse tutorial&nbsp;vamos&nbsp;criar&nbsp;uma&nbsp;API RESTful&nbsp;em&nbsp;NodeJS&nbsp;utilizando&nbsp;typescript,&nbsp;vamos&nbsp;usar o&nbsp;exemplo&nbsp;de&nbsp;gerenciar&nbsp;clientes&nbsp;ao&nbsp;concluir&nbsp;vamos&nbsp;conseguir&nbsp;inserir,&nbsp;editar,&nbsp;deletar&nbsp;e&nbsp;listar&nbsp;os&nbsp;clientes. Vamos&nbsp;l\u00e1&nbsp;ent\u00e3o!&nbsp; O&nbsp;que vamos usar?&nbsp; NodeJS&nbsp; NPM&nbsp; TypeScript&nbsp; MongoDB&nbsp; Postman&nbsp; Dentro do terminal do NodeJS&nbsp;vamos&nbsp;iniciar&nbsp;nosso&nbsp;projeto&nbsp;criando&nbsp;uma&nbsp;pasta com o&nbsp;nome:&nbsp;clients&nbsp;e&nbsp;vamos&nbsp;entrar&nbsp;nessa&nbsp;pasta com o&nbsp;comando&nbsp;cd&nbsp; mkdir&nbsp;clients &amp;&amp; cd clients&nbsp; Vamos&nbsp;iniciar&nbsp;o&nbsp;projeto&nbsp;com o commando:&nbsp;npm&nbsp;init&nbsp; Ir\u00e3o&nbsp;aparecer&nbsp;algumas&nbsp;perguntas:&nbsp; name: (clients)&nbsp; version: (1.0.0)&nbsp; description:&nbsp;&nbsp; entry point: (index.js)&nbsp;server.ts&nbsp; test command:&nbsp;&nbsp; git repository:&nbsp; keywords:&nbsp;&nbsp; author:&nbsp;Jakeliny&nbsp;Gracielly&nbsp; license: (ISC)&nbsp; Os&nbsp;valores&nbsp;que&nbsp;aparecem&nbsp;entre&nbsp;par\u00eanteses&nbsp;s\u00e3o&nbsp;os&nbsp;valores&nbsp;default, se nada for&nbsp;digitado&nbsp;o valor entre&nbsp;par\u00eanteses&nbsp;ser\u00e1&nbsp;preenchido&nbsp; Na&nbsp;pergunta&nbsp;entry point,&nbsp;vamos&nbsp;colocar&nbsp;server.ts&nbsp;ser\u00e1&nbsp;nosso&nbsp;arquivo&nbsp;de&nbsp;partida&nbsp;&hellip;<\/p>\n","protected":false},"author":8,"featured_media":1353,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[94],"tags":[369,370,371],"post_series":[],"class_list":["post-1289","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutoriais","tag-api-rest","tag-nodejs","tag-typescript","entry","has-media"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Parte 1 - Crie uma API REST em NodeJS + TypeScript - Blog da FCamara<\/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:\/\/fcamara.com\/blog\/blog-parte-1-crie-uma-api-rest-em-nodejs-typescript\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Parte 1 - Crie uma API REST em NodeJS + TypeScript - Blog da FCamara\" \/>\n<meta property=\"og:description\" content=\"Autora:&nbsp;Jakeliny&nbsp;Gracielly&nbsp; Nesse tutorial&nbsp;vamos&nbsp;criar&nbsp;uma&nbsp;API RESTful&nbsp;em&nbsp;NodeJS&nbsp;utilizando&nbsp;typescript,&nbsp;vamos&nbsp;usar o&nbsp;exemplo&nbsp;de&nbsp;gerenciar&nbsp;clientes&nbsp;ao&nbsp;concluir&nbsp;vamos&nbsp;conseguir&nbsp;inserir,&nbsp;editar,&nbsp;deletar&nbsp;e&nbsp;listar&nbsp;os&nbsp;clientes. Vamos&nbsp;l\u00e1&nbsp;ent\u00e3o!&nbsp; O&nbsp;que vamos usar?&nbsp; NodeJS&nbsp; NPM&nbsp; TypeScript&nbsp; MongoDB&nbsp; Postman&nbsp; Dentro do terminal do NodeJS&nbsp;vamos&nbsp;iniciar&nbsp;nosso&nbsp;projeto&nbsp;criando&nbsp;uma&nbsp;pasta com o&nbsp;nome:&nbsp;clients&nbsp;e&nbsp;vamos&nbsp;entrar&nbsp;nessa&nbsp;pasta com o&nbsp;comando&nbsp;cd&nbsp; mkdir&nbsp;clients &amp;&amp; cd clients&nbsp; Vamos&nbsp;iniciar&nbsp;o&nbsp;projeto&nbsp;com o commando:&nbsp;npm&nbsp;init&nbsp; Ir\u00e3o&nbsp;aparecer&nbsp;algumas&nbsp;perguntas:&nbsp; name: (clients)&nbsp; version: (1.0.0)&nbsp; description:&nbsp;&nbsp; entry point: (index.js)&nbsp;server.ts&nbsp; test command:&nbsp;&nbsp; git repository:&nbsp; keywords:&nbsp;&nbsp; author:&nbsp;Jakeliny&nbsp;Gracielly&nbsp; license: (ISC)&nbsp; Os&nbsp;valores&nbsp;que&nbsp;aparecem&nbsp;entre&nbsp;par\u00eanteses&nbsp;s\u00e3o&nbsp;os&nbsp;valores&nbsp;default, se nada for&nbsp;digitado&nbsp;o valor entre&nbsp;par\u00eanteses&nbsp;ser\u00e1&nbsp;preenchido&nbsp; Na&nbsp;pergunta&nbsp;entry point,&nbsp;vamos&nbsp;colocar&nbsp;server.ts&nbsp;ser\u00e1&nbsp;nosso&nbsp;arquivo&nbsp;de&nbsp;partida&nbsp;&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fcamara.com\/blog\/blog-parte-1-crie-uma-api-rest-em-nodejs-typescript\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog da FCamara\" \/>\n<meta property=\"article:published_time\" content=\"2021-11-16T19:19:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-12-05T14:57:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fcamara.com\/blog\/wp-content\/uploads\/2021\/11\/Thumb-Blog-FCnuvem-APIrest.png\" \/>\n\t<meta property=\"og:image:width\" content=\"260\" \/>\n\t<meta property=\"og:image:height\" content=\"205\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"fcnuvem\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"fcnuvem\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fcamara.com\/blog\/blog-parte-1-crie-uma-api-rest-em-nodejs-typescript\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fcamara.com\/blog\/blog-parte-1-crie-uma-api-rest-em-nodejs-typescript\/\"},\"author\":{\"name\":\"fcnuvem\",\"@id\":\"https:\/\/fcamara.com\/blog\/#\/schema\/person\/62d48659a26297896002e2434a44e28a\"},\"headline\":\"Parte 1 &#8211; Crie uma API REST em NodeJS + TypeScript\",\"datePublished\":\"2021-11-16T19:19:53+00:00\",\"dateModified\":\"2022-12-05T14:57:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fcamara.com\/blog\/blog-parte-1-crie-uma-api-rest-em-nodejs-typescript\/\"},\"wordCount\":1151,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fcamara.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/fcamara.com\/blog\/blog-parte-1-crie-uma-api-rest-em-nodejs-typescript\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fcamara.com\/blog\/wp-content\/uploads\/2021\/11\/Thumb-Blog-FCnuvem-APIrest.png\",\"keywords\":[\"API REST\",\"NODEJS\",\"TYPESCRIPT\"],\"articleSection\":[\"Tutoriais\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fcamara.com\/blog\/blog-parte-1-crie-uma-api-rest-em-nodejs-typescript\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fcamara.com\/blog\/blog-parte-1-crie-uma-api-rest-em-nodejs-typescript\/\",\"url\":\"https:\/\/fcamara.com\/blog\/blog-parte-1-crie-uma-api-rest-em-nodejs-typescript\/\",\"name\":\"Parte 1 - Crie uma API REST em NodeJS + TypeScript - Blog da FCamara\",\"isPartOf\":{\"@id\":\"https:\/\/fcamara.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/fcamara.com\/blog\/blog-parte-1-crie-uma-api-rest-em-nodejs-typescript\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/fcamara.com\/blog\/blog-parte-1-crie-uma-api-rest-em-nodejs-typescript\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fcamara.com\/blog\/wp-content\/uploads\/2021\/11\/Thumb-Blog-FCnuvem-APIrest.png\",\"datePublished\":\"2021-11-16T19:19:53+00:00\",\"dateModified\":\"2022-12-05T14:57:52+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fcamara.com\/blog\/blog-parte-1-crie-uma-api-rest-em-nodejs-typescript\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fcamara.com\/blog\/blog-parte-1-crie-uma-api-rest-em-nodejs-typescript\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/fcamara.com\/blog\/blog-parte-1-crie-uma-api-rest-em-nodejs-typescript\/#primaryimage\",\"url\":\"https:\/\/fcamara.com\/blog\/wp-content\/uploads\/2021\/11\/Thumb-Blog-FCnuvem-APIrest.png\",\"contentUrl\":\"https:\/\/fcamara.com\/blog\/wp-content\/uploads\/2021\/11\/Thumb-Blog-FCnuvem-APIrest.png\",\"width\":260,\"height\":205},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fcamara.com\/blog\/blog-parte-1-crie-uma-api-rest-em-nodejs-typescript\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\/\/fcamara.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"aplicativo mobile\",\"item\":\"https:\/\/fcamara.com\/blog\/tags\/aplicativo-mobile\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Parte 1 &#8211; Crie uma API REST em NodeJS + TypeScript\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fcamara.com\/blog\/#website\",\"url\":\"https:\/\/fcamara.com\/blog\/\",\"name\":\"Blog da FCamara\",\"description\":\"Esta \u00e9 a \u00e1rea de insights sobre o mercado de tecnologia.\",\"publisher\":{\"@id\":\"https:\/\/fcamara.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fcamara.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/fcamara.com\/blog\/#organization\",\"name\":\"Blog da FCamara\",\"url\":\"https:\/\/fcamara.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/fcamara.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/fcamara.com\/blog\/wp-content\/uploads\/2024\/07\/FCamara-Blog-laranja.webp\",\"contentUrl\":\"https:\/\/fcamara.com\/blog\/wp-content\/uploads\/2024\/07\/FCamara-Blog-laranja.webp\",\"width\":459,\"height\":68,\"caption\":\"Blog da FCamara\"},\"image\":{\"@id\":\"https:\/\/fcamara.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/fcamara.com\/blog\/#\/schema\/person\/62d48659a26297896002e2434a44e28a\",\"name\":\"fcnuvem\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/?s=96&d=mm&r=g\",\"caption\":\"fcnuvem\"},\"url\":\"https:\/\/fcamara.com\/blog\/author\/fcnuvem\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Parte 1 - Crie uma API REST em NodeJS + TypeScript - Blog da FCamara","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:\/\/fcamara.com\/blog\/blog-parte-1-crie-uma-api-rest-em-nodejs-typescript\/","og_locale":"pt_BR","og_type":"article","og_title":"Parte 1 - Crie uma API REST em NodeJS + TypeScript - Blog da FCamara","og_description":"Autora:&nbsp;Jakeliny&nbsp;Gracielly&nbsp; Nesse tutorial&nbsp;vamos&nbsp;criar&nbsp;uma&nbsp;API RESTful&nbsp;em&nbsp;NodeJS&nbsp;utilizando&nbsp;typescript,&nbsp;vamos&nbsp;usar o&nbsp;exemplo&nbsp;de&nbsp;gerenciar&nbsp;clientes&nbsp;ao&nbsp;concluir&nbsp;vamos&nbsp;conseguir&nbsp;inserir,&nbsp;editar,&nbsp;deletar&nbsp;e&nbsp;listar&nbsp;os&nbsp;clientes. Vamos&nbsp;l\u00e1&nbsp;ent\u00e3o!&nbsp; O&nbsp;que vamos usar?&nbsp; NodeJS&nbsp; NPM&nbsp; TypeScript&nbsp; MongoDB&nbsp; Postman&nbsp; Dentro do terminal do NodeJS&nbsp;vamos&nbsp;iniciar&nbsp;nosso&nbsp;projeto&nbsp;criando&nbsp;uma&nbsp;pasta com o&nbsp;nome:&nbsp;clients&nbsp;e&nbsp;vamos&nbsp;entrar&nbsp;nessa&nbsp;pasta com o&nbsp;comando&nbsp;cd&nbsp; mkdir&nbsp;clients &amp;&amp; cd clients&nbsp; Vamos&nbsp;iniciar&nbsp;o&nbsp;projeto&nbsp;com o commando:&nbsp;npm&nbsp;init&nbsp; Ir\u00e3o&nbsp;aparecer&nbsp;algumas&nbsp;perguntas:&nbsp; name: (clients)&nbsp; version: (1.0.0)&nbsp; description:&nbsp;&nbsp; entry point: (index.js)&nbsp;server.ts&nbsp; test command:&nbsp;&nbsp; git repository:&nbsp; keywords:&nbsp;&nbsp; author:&nbsp;Jakeliny&nbsp;Gracielly&nbsp; license: (ISC)&nbsp; Os&nbsp;valores&nbsp;que&nbsp;aparecem&nbsp;entre&nbsp;par\u00eanteses&nbsp;s\u00e3o&nbsp;os&nbsp;valores&nbsp;default, se nada for&nbsp;digitado&nbsp;o valor entre&nbsp;par\u00eanteses&nbsp;ser\u00e1&nbsp;preenchido&nbsp; Na&nbsp;pergunta&nbsp;entry point,&nbsp;vamos&nbsp;colocar&nbsp;server.ts&nbsp;ser\u00e1&nbsp;nosso&nbsp;arquivo&nbsp;de&nbsp;partida&nbsp;&hellip;","og_url":"https:\/\/fcamara.com\/blog\/blog-parte-1-crie-uma-api-rest-em-nodejs-typescript\/","og_site_name":"Blog da FCamara","article_published_time":"2021-11-16T19:19:53+00:00","article_modified_time":"2022-12-05T14:57:52+00:00","og_image":[{"width":260,"height":205,"url":"https:\/\/fcamara.com\/blog\/wp-content\/uploads\/2021\/11\/Thumb-Blog-FCnuvem-APIrest.png","type":"image\/png"}],"author":"fcnuvem","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"fcnuvem","Est. tempo de leitura":"2 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fcamara.com\/blog\/blog-parte-1-crie-uma-api-rest-em-nodejs-typescript\/#article","isPartOf":{"@id":"https:\/\/fcamara.com\/blog\/blog-parte-1-crie-uma-api-rest-em-nodejs-typescript\/"},"author":{"name":"fcnuvem","@id":"https:\/\/fcamara.com\/blog\/#\/schema\/person\/62d48659a26297896002e2434a44e28a"},"headline":"Parte 1 &#8211; Crie uma API REST em NodeJS + TypeScript","datePublished":"2021-11-16T19:19:53+00:00","dateModified":"2022-12-05T14:57:52+00:00","mainEntityOfPage":{"@id":"https:\/\/fcamara.com\/blog\/blog-parte-1-crie-uma-api-rest-em-nodejs-typescript\/"},"wordCount":1151,"commentCount":0,"publisher":{"@id":"https:\/\/fcamara.com\/blog\/#organization"},"image":{"@id":"https:\/\/fcamara.com\/blog\/blog-parte-1-crie-uma-api-rest-em-nodejs-typescript\/#primaryimage"},"thumbnailUrl":"https:\/\/fcamara.com\/blog\/wp-content\/uploads\/2021\/11\/Thumb-Blog-FCnuvem-APIrest.png","keywords":["API REST","NODEJS","TYPESCRIPT"],"articleSection":["Tutoriais"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fcamara.com\/blog\/blog-parte-1-crie-uma-api-rest-em-nodejs-typescript\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fcamara.com\/blog\/blog-parte-1-crie-uma-api-rest-em-nodejs-typescript\/","url":"https:\/\/fcamara.com\/blog\/blog-parte-1-crie-uma-api-rest-em-nodejs-typescript\/","name":"Parte 1 - Crie uma API REST em NodeJS + TypeScript - Blog da FCamara","isPartOf":{"@id":"https:\/\/fcamara.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fcamara.com\/blog\/blog-parte-1-crie-uma-api-rest-em-nodejs-typescript\/#primaryimage"},"image":{"@id":"https:\/\/fcamara.com\/blog\/blog-parte-1-crie-uma-api-rest-em-nodejs-typescript\/#primaryimage"},"thumbnailUrl":"https:\/\/fcamara.com\/blog\/wp-content\/uploads\/2021\/11\/Thumb-Blog-FCnuvem-APIrest.png","datePublished":"2021-11-16T19:19:53+00:00","dateModified":"2022-12-05T14:57:52+00:00","breadcrumb":{"@id":"https:\/\/fcamara.com\/blog\/blog-parte-1-crie-uma-api-rest-em-nodejs-typescript\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fcamara.com\/blog\/blog-parte-1-crie-uma-api-rest-em-nodejs-typescript\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/fcamara.com\/blog\/blog-parte-1-crie-uma-api-rest-em-nodejs-typescript\/#primaryimage","url":"https:\/\/fcamara.com\/blog\/wp-content\/uploads\/2021\/11\/Thumb-Blog-FCnuvem-APIrest.png","contentUrl":"https:\/\/fcamara.com\/blog\/wp-content\/uploads\/2021\/11\/Thumb-Blog-FCnuvem-APIrest.png","width":260,"height":205},{"@type":"BreadcrumbList","@id":"https:\/\/fcamara.com\/blog\/blog-parte-1-crie-uma-api-rest-em-nodejs-typescript\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/fcamara.com\/blog\/"},{"@type":"ListItem","position":2,"name":"aplicativo mobile","item":"https:\/\/fcamara.com\/blog\/tags\/aplicativo-mobile\/"},{"@type":"ListItem","position":3,"name":"Parte 1 &#8211; Crie uma API REST em NodeJS + TypeScript"}]},{"@type":"WebSite","@id":"https:\/\/fcamara.com\/blog\/#website","url":"https:\/\/fcamara.com\/blog\/","name":"Blog da FCamara","description":"Esta \u00e9 a \u00e1rea de insights sobre o mercado de tecnologia.","publisher":{"@id":"https:\/\/fcamara.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fcamara.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/fcamara.com\/blog\/#organization","name":"Blog da FCamara","url":"https:\/\/fcamara.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/fcamara.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/fcamara.com\/blog\/wp-content\/uploads\/2024\/07\/FCamara-Blog-laranja.webp","contentUrl":"https:\/\/fcamara.com\/blog\/wp-content\/uploads\/2024\/07\/FCamara-Blog-laranja.webp","width":459,"height":68,"caption":"Blog da FCamara"},"image":{"@id":"https:\/\/fcamara.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/fcamara.com\/blog\/#\/schema\/person\/62d48659a26297896002e2434a44e28a","name":"fcnuvem","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/secure.gravatar.com\/avatar\/?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/?s=96&d=mm&r=g","caption":"fcnuvem"},"url":"https:\/\/fcamara.com\/blog\/author\/fcnuvem\/"}]}},"lang":"br","translations":{"br":1289},"pll_sync_post":[],"_links":{"self":[{"href":"https:\/\/fcamara.com\/blog\/wp-json\/wp\/v2\/posts\/1289","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fcamara.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fcamara.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fcamara.com\/blog\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/fcamara.com\/blog\/wp-json\/wp\/v2\/comments?post=1289"}],"version-history":[{"count":1,"href":"https:\/\/fcamara.com\/blog\/wp-json\/wp\/v2\/posts\/1289\/revisions"}],"predecessor-version":[{"id":6158,"href":"https:\/\/fcamara.com\/blog\/wp-json\/wp\/v2\/posts\/1289\/revisions\/6158"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fcamara.com\/blog\/wp-json\/wp\/v2\/media\/1353"}],"wp:attachment":[{"href":"https:\/\/fcamara.com\/blog\/wp-json\/wp\/v2\/media?parent=1289"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fcamara.com\/blog\/wp-json\/wp\/v2\/categories?post=1289"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fcamara.com\/blog\/wp-json\/wp\/v2\/tags?post=1289"},{"taxonomy":"post_series","embeddable":true,"href":"https:\/\/fcamara.com\/blog\/wp-json\/wp\/v2\/post_series?post=1289"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}