{"id":1348,"date":"2021-11-16T16:20:49","date_gmt":"2021-11-16T19:20:49","guid":{"rendered":"https:\/\/fcnuvem.com.br\/home\/?p=1348"},"modified":"2022-12-05T11:57:43","modified_gmt":"2022-12-05T14:57:43","slug":"blog-parte-3-crie-uma-api-rest-em-nodejs-typescript","status":"publish","type":"post","link":"https:\/\/fcamara.com\/blog\/blog-parte-3-crie-uma-api-rest-em-nodejs-typescript\/","title":{"rendered":"Parte 3 &#8211; Crie uma API REST em NodeJS + TypeScript"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"730\" height=\"205\" src=\"https:\/\/fcamara.com\/blog\/wp-content\/uploads\/2021\/11\/Blog-730x205-FCnuvem-APIrest.png\" alt=\"\" class=\"wp-image-1350\" srcset=\"https:\/\/fcamara.com\/blog\/wp-content\/uploads\/2021\/11\/Blog-730x205-FCnuvem-APIrest.png 730w, https:\/\/fcamara.com\/blog\/wp-content\/uploads\/2021\/11\/Blog-730x205-FCnuvem-APIrest-300x84.png 300w\" sizes=\"auto, (max-width: 730px) 100vw, 730px\" \/><figcaption><sub><strong>Autora:<\/strong>\u00a0Jakeliny\u00a0Gracielly\u00a0<\/sub><\/figcaption><\/figure>\n\n\n\n<p><strong>Vamos gerenciar nossos clientes<\/strong>&nbsp;<\/p>\n\n\n\n<p>Agora que j\u00e1 temos&nbsp;nosso&nbsp;<em>web&nbsp;service<\/em>&nbsp;funcionando e conectado ao nosso banco de dados vamos come\u00e7ar a escrever o&nbsp;<em>controller&nbsp;<\/em>que ser\u00e1 respons\u00e1vel pelo nosso&nbsp;<em>CRUD&nbsp;<\/em>de clientes&nbsp;<\/p>\n\n\n\n<p>Vamos come\u00e7ar criando os seguintes arquivos:&nbsp;<\/p>\n\n\n\n<p>touch&nbsp;server\/{controller,model}.ts&nbsp;<\/p>\n\n\n\n<p>Vamos come\u00e7ar pelo arquivo&nbsp;<em>model<\/em>, onde vamos escrever os campos e tipos de campos que teremos para guardar as informa\u00e7\u00f5es do nosso cliente, por&nbsp;ultimo&nbsp;vamos passar para o mongo criar a&nbsp;<em>colletion<\/em>.&nbsp;<br>Sempre que quisermos executar algo com o mongo o&nbsp;mongoose&nbsp;tem a fun\u00e7\u00e3o de verificar se essa \u201ctabela\u201d existe, se n\u00e3o existir ele cria para n\u00f3s e a usa em seguida sem que o usu\u00e1rio perceba o que est\u00e1 acontecendo.&nbsp;<\/p>\n\n\n\n<p>import&nbsp;* as&nbsp;mongoose&nbsp;from&nbsp;&#8216;mongoose&#8217;;&nbsp;<br>&nbsp;<\/p>\n\n\n\n<p>const&nbsp;CrushSchema&nbsp;= new&nbsp;mongoose.Schema({&nbsp;<br>&nbsp;<\/p>\n\n\n\n<p>nome: {type:&nbsp;String,&nbsp;required:&nbsp;true},&nbsp;<\/p>\n\n\n\n<p>telefone: {type:&nbsp;String,&nbsp;unique:&nbsp;true,&nbsp;required:&nbsp;true},&nbsp;<\/p>\n\n\n\n<p>email: {type:&nbsp;String,&nbsp;unique:&nbsp;true,&nbsp;required:&nbsp;true},&nbsp;<\/p>\n\n\n\n<p>observacoes: {type:&nbsp;String,&nbsp;required:&nbsp;true},&nbsp;<\/p>\n\n\n\n<p>createdAt: {type: Date, default:&nbsp;Date.now}&nbsp;<br>&nbsp;<\/p>\n\n\n\n<p>});&nbsp;<\/p>\n\n\n\n<p>export&nbsp;default&nbsp;mongoose.model(Clientes,&nbsp;ClienteSchema);&nbsp;<\/p>\n\n\n\n<p>Agora vamos ao nosso arquivo&nbsp;<em>controller&nbsp;<\/em>onde vamos escrever nossos m\u00e9todos de&nbsp;<em>CRUD +&nbsp;<\/em>as fun\u00e7\u00f5es que ter\u00e3o a responsabilidade de enviar o conte\u00fado para o&nbsp;routes&nbsp;dentro do<em>&nbsp;app.ts<\/em>:&nbsp;<\/p>\n\n\n\n<p>import&nbsp;model&nbsp;from&nbsp;&#8216;.\/model&#8217;;&nbsp;<br>class&nbsp;Controller&nbsp;{&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;constructor()&nbsp;{ }&nbsp;<br>&nbsp;&nbsp;&nbsp; \/\/select&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;getClientes() {&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;model.find({});&nbsp;<br>&nbsp;&nbsp;&nbsp; }&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;select(req, res) {&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.&nbsp;getClientes&nbsp;()&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; .then(clientes=&gt;&nbsp;res.status(200).json({ &#8216;result&#8217;:&nbsp;clientes }))&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.catch(err&nbsp;=&gt;&nbsp;res.status(400).json({ &#8216;result&#8217;:&nbsp;err&nbsp;}));&nbsp;<br>&nbsp;&nbsp;&nbsp; }&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp; \/\/selectone&nbsp;<br>&nbsp;&nbsp;&nbsp;getClienteByID(id) {&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;model.find(id);&nbsp;<br>&nbsp;&nbsp; }&nbsp;<br>&nbsp;&nbsp;&nbsp;selectOne(req, res) {&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;id =&nbsp;{ _id:&nbsp;req.params.id }&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.getClienteByID(id)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .then(cliente =&gt;&nbsp;res.status(200).json({ &#8216;result&#8217;:&nbsp;cliente }))&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.catch(err&nbsp;=&gt;&nbsp;res.status(400).json({ &#8216;result&#8217;:&nbsp;err&nbsp;}));&nbsp;<br>&nbsp;&nbsp;&nbsp; }&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp; \/\/delete&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;deleteByID(id) {&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;model.deleteOne(id);&nbsp;<br>&nbsp;&nbsp;&nbsp; }&nbsp;<br>&nbsp;&nbsp;&nbsp; delete(req, res) {&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;id =&nbsp;{ _id:&nbsp;req.params.id }&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.deleteByID(id)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .then(clientes =&gt;&nbsp;res.status(200).json({ &#8216;result&#8217;:&nbsp;clientes }))&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.catch(err&nbsp;=&gt;&nbsp;res.status(400).json({ &#8216;result&#8217;:&nbsp;err&nbsp;}));&nbsp;<br>&nbsp;&nbsp;&nbsp; }&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp; \/\/update&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;updateCliente(id, data) {&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;model.findOneAndUpdate(id, data);&nbsp;<br>&nbsp;&nbsp;&nbsp; }&nbsp;<br>&nbsp;&nbsp;&nbsp; update(req, res) {&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;id =&nbsp;{ _id:&nbsp;req.params.id }&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;cliente =&nbsp;req.body;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.updateCliente(id, cliente)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .then(clientes =&gt;&nbsp;res.status(200).json({ &#8216;result&#8217;:&nbsp;clientes }))&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.catch(err&nbsp;=&gt;&nbsp;res.status(400).json({ &#8216;result&#8217;:&nbsp;err&nbsp;}));&nbsp;<br>&nbsp;&nbsp;&nbsp; }&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp; \/\/insert&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;createCliente(data) {&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;model.create(data);&nbsp;<br>&nbsp;&nbsp;&nbsp; }&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;insert(req, res) {&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;cliente =&nbsp;req.body;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.createCliente(cliente)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .then(clientes =&gt;&nbsp;res.status(200).json({ &#8216;result&#8217;:&nbsp;clientes }))&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.catch(err&nbsp;=&gt;&nbsp;res.status(400).json({ &#8216;result&#8217;:&nbsp;err&nbsp;}));&nbsp;<br>&nbsp;&nbsp;&nbsp; }&nbsp;<br>}&nbsp;<br>export&nbsp;default&nbsp;Controller;&nbsp;<\/p>\n\n\n\n<p>Conclu\u00eddo! Com o nosso&nbsp;<em>CRUD&nbsp;<\/em>pronto vamos chamar tudo isso no arquivo&nbsp;<em>app.ts<\/em>, come\u00e7amos importando o arquivo&nbsp;routes.ts&nbsp;que \u00e9 o respons\u00e1vel por chamar toda a estrutura do m\u00f3dulo&nbsp;<\/p>\n\n\n\n<p>import&nbsp;database&nbsp;from&nbsp;&#8216;.\/db&#8217;;&nbsp;&nbsp;<br>import&nbsp;controller&nbsp;from&nbsp;&#8216;.\/controller&#8217;;&nbsp;<\/p>\n\n\n\n<p>Em nosso m\u00e9todo construtor vamos instanciar a classe&nbsp;<em>database&nbsp;<\/em>&nbsp;<\/p>\n\n\n\n<p>&nbsp;<br>this.database&nbsp;= new&nbsp;database();&nbsp;<\/p>\n\n\n\n<p>this.database.createConnection();&nbsp;<br>this.controller&nbsp;= new&nbsp;controller();&nbsp;<\/p>\n\n\n\n<p>No m\u00e9todo rotas onde chamamos o \u201c\/\u201d que \u00e9 a nossa URL base, vamos criar novas rotas para chamar cada fun\u00e7\u00e3o da nossa API que s\u00e3o:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Listar todos os nossos Clientes&nbsp;<\/li><li>Listar um Cliente espec\u00edfico&nbsp;<\/li><li>Editar um Cliente&nbsp;<\/li><li>Apagar um Cliente&nbsp;<br>&nbsp;<\/li><\/ul>\n\n\n\n<p>Vamos criar as rotas:&nbsp;<\/p>\n\n\n\n<p>this.app.route(&#8216;\/api\/clientes\u2019).get( (req,res)=&gt;&nbsp;this.controller.select(req, res) );&nbsp;<\/p>\n\n\n\n<p>&nbsp;<br>this.app.route(&#8216;\/api\/clientes\/:id&#8217;).get( (req,res)=&gt;&nbsp;this.controller.selectOne(req, res) );&nbsp;<\/p>\n\n\n\n<p>&nbsp;<br>this.app.route(&#8216;\/api\/clientes\/:id&#8217;).delete( (req,res)=&gt;&nbsp;this.controller.delete(req, res) );&nbsp;<\/p>\n\n\n\n<p>&nbsp;<br>this.app.route(&#8216;\/api\/clientes\/:id&#8217;).put( (req,res)=&gt;&nbsp;this.controller.update(req, res) );&nbsp;<br>&nbsp;<br>this.app.route(&#8216;\/api\/clientes\u2019).post( (req,res)=&gt;&nbsp;this.controller.insert(req, res) );&nbsp;<\/p>\n\n\n\n<p>Se voc\u00ea digitar agora no seu navegador&nbsp;<a href=\"http:\/\/localhost:5000\/api\/clientes\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/localhost:5000\/api\/clientes<\/a>&nbsp;vai aparecer a lista (em&nbsp;json) de todos os Clientes e suas informa\u00e7\u00f5es, para a fun\u00e7\u00e3o de&nbsp;insert&nbsp;e update funcionarem corretamente precisamos incluir um middleware executando o&nbsp;<em>bodyparser&nbsp;<\/em>para fazer a convers\u00e3o do tudo que entra e do que sai em&nbsp;<em>JSON<\/em>, vamos come\u00e7ar pelo m\u00e9todo, ainda dentro do arquivo&nbsp;<em>app.ts<\/em>.&nbsp;<\/p>\n\n\n\n<p>middleware(){&nbsp;&nbsp;<\/p>\n\n\n\n<p>this.app.use(bodyParser.json());&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.app.use(bodyParser.urlencoded({&nbsp;extended:&nbsp;true&nbsp;}));&nbsp;<\/p>\n\n\n\n<p>}&nbsp;<br>&nbsp;<br>Agora vamos cham\u00e1-lo dentro do m\u00e9todo construtor, o m\u00e9todo completo ficar\u00e1 assim:&nbsp;<br>&nbsp;<\/p>\n\n\n\n<p>constructor(){&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.app&nbsp;=&nbsp;express();&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.middleware();&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.database&nbsp;= new&nbsp;database();&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.database.createConnection();&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.controller&nbsp;= new&nbsp;controller();&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.routes();&nbsp;<\/p>\n\n\n\n<p>}&nbsp;<\/p>\n\n\n\n<p><strong>Como podemos testar a API?<\/strong>&nbsp;<\/p>\n\n\n\n<p>Para testar a API \u00e9 necess\u00e1rio um programa como o&nbsp;Postman, com ele \u00e9 poss\u00edvel usar os m\u00e9todos http POST, PUT e DELETE:&nbsp;<a href=\"https:\/\/www.getpostman.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.getpostman.com\/<\/a>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vamos gerenciar nossos clientes&nbsp; Agora que j\u00e1 temos&nbsp;nosso&nbsp;web&nbsp;service&nbsp;funcionando e conectado ao nosso banco de dados vamos come\u00e7ar a escrever o&nbsp;controller&nbsp;que ser\u00e1 respons\u00e1vel pelo nosso&nbsp;CRUD&nbsp;de clientes&nbsp; Vamos come\u00e7ar criando os seguintes arquivos:&nbsp; touch&nbsp;server\/{controller,model}.ts&nbsp; Vamos come\u00e7ar pelo arquivo&nbsp;model, onde vamos escrever os campos e tipos de campos que teremos para guardar as informa\u00e7\u00f5es do nosso cliente, por&nbsp;ultimo&nbsp;vamos&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-1348","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 3 - 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-3-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 3 - Crie uma API REST em NodeJS + TypeScript - Blog da FCamara\" \/>\n<meta property=\"og:description\" content=\"Vamos gerenciar nossos clientes&nbsp; Agora que j\u00e1 temos&nbsp;nosso&nbsp;web&nbsp;service&nbsp;funcionando e conectado ao nosso banco de dados vamos come\u00e7ar a escrever o&nbsp;controller&nbsp;que ser\u00e1 respons\u00e1vel pelo nosso&nbsp;CRUD&nbsp;de clientes&nbsp; Vamos come\u00e7ar criando os seguintes arquivos:&nbsp; touch&nbsp;server\/{controller,model}.ts&nbsp; Vamos come\u00e7ar pelo arquivo&nbsp;model, onde vamos escrever os campos e tipos de campos que teremos para guardar as informa\u00e7\u00f5es do nosso cliente, por&nbsp;ultimo&nbsp;vamos&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fcamara.com\/blog\/blog-parte-3-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:20:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-12-05T14:57:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fcamara.com\/blog\/wp-content\/uploads\/2021\/11\/Blog-730x205-FCnuvem-APIrest-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"730\" \/>\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=\"3 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-3-crie-uma-api-rest-em-nodejs-typescript\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fcamara.com\/blog\/blog-parte-3-crie-uma-api-rest-em-nodejs-typescript\/\"},\"author\":{\"name\":\"fcnuvem\",\"@id\":\"https:\/\/fcamara.com\/blog\/#\/schema\/person\/62d48659a26297896002e2434a44e28a\"},\"headline\":\"Parte 3 &#8211; Crie uma API REST em NodeJS + TypeScript\",\"datePublished\":\"2021-11-16T19:20:49+00:00\",\"dateModified\":\"2022-12-05T14:57:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fcamara.com\/blog\/blog-parte-3-crie-uma-api-rest-em-nodejs-typescript\/\"},\"wordCount\":1358,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fcamara.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/fcamara.com\/blog\/blog-parte-3-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-3-crie-uma-api-rest-em-nodejs-typescript\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fcamara.com\/blog\/blog-parte-3-crie-uma-api-rest-em-nodejs-typescript\/\",\"url\":\"https:\/\/fcamara.com\/blog\/blog-parte-3-crie-uma-api-rest-em-nodejs-typescript\/\",\"name\":\"Parte 3 - 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-3-crie-uma-api-rest-em-nodejs-typescript\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/fcamara.com\/blog\/blog-parte-3-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:20:49+00:00\",\"dateModified\":\"2022-12-05T14:57:43+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fcamara.com\/blog\/blog-parte-3-crie-uma-api-rest-em-nodejs-typescript\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fcamara.com\/blog\/blog-parte-3-crie-uma-api-rest-em-nodejs-typescript\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/fcamara.com\/blog\/blog-parte-3-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-3-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 3 &#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 3 - 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-3-crie-uma-api-rest-em-nodejs-typescript\/","og_locale":"pt_BR","og_type":"article","og_title":"Parte 3 - Crie uma API REST em NodeJS + TypeScript - Blog da FCamara","og_description":"Vamos gerenciar nossos clientes&nbsp; Agora que j\u00e1 temos&nbsp;nosso&nbsp;web&nbsp;service&nbsp;funcionando e conectado ao nosso banco de dados vamos come\u00e7ar a escrever o&nbsp;controller&nbsp;que ser\u00e1 respons\u00e1vel pelo nosso&nbsp;CRUD&nbsp;de clientes&nbsp; Vamos come\u00e7ar criando os seguintes arquivos:&nbsp; touch&nbsp;server\/{controller,model}.ts&nbsp; Vamos come\u00e7ar pelo arquivo&nbsp;model, onde vamos escrever os campos e tipos de campos que teremos para guardar as informa\u00e7\u00f5es do nosso cliente, por&nbsp;ultimo&nbsp;vamos&hellip;","og_url":"https:\/\/fcamara.com\/blog\/blog-parte-3-crie-uma-api-rest-em-nodejs-typescript\/","og_site_name":"Blog da FCamara","article_published_time":"2021-11-16T19:20:49+00:00","article_modified_time":"2022-12-05T14:57:43+00:00","og_image":[{"width":730,"height":205,"url":"https:\/\/fcamara.com\/blog\/wp-content\/uploads\/2021\/11\/Blog-730x205-FCnuvem-APIrest-1.png","type":"image\/png"}],"author":"fcnuvem","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"fcnuvem","Est. tempo de leitura":"3 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fcamara.com\/blog\/blog-parte-3-crie-uma-api-rest-em-nodejs-typescript\/#article","isPartOf":{"@id":"https:\/\/fcamara.com\/blog\/blog-parte-3-crie-uma-api-rest-em-nodejs-typescript\/"},"author":{"name":"fcnuvem","@id":"https:\/\/fcamara.com\/blog\/#\/schema\/person\/62d48659a26297896002e2434a44e28a"},"headline":"Parte 3 &#8211; Crie uma API REST em NodeJS + TypeScript","datePublished":"2021-11-16T19:20:49+00:00","dateModified":"2022-12-05T14:57:43+00:00","mainEntityOfPage":{"@id":"https:\/\/fcamara.com\/blog\/blog-parte-3-crie-uma-api-rest-em-nodejs-typescript\/"},"wordCount":1358,"commentCount":0,"publisher":{"@id":"https:\/\/fcamara.com\/blog\/#organization"},"image":{"@id":"https:\/\/fcamara.com\/blog\/blog-parte-3-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-3-crie-uma-api-rest-em-nodejs-typescript\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fcamara.com\/blog\/blog-parte-3-crie-uma-api-rest-em-nodejs-typescript\/","url":"https:\/\/fcamara.com\/blog\/blog-parte-3-crie-uma-api-rest-em-nodejs-typescript\/","name":"Parte 3 - 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-3-crie-uma-api-rest-em-nodejs-typescript\/#primaryimage"},"image":{"@id":"https:\/\/fcamara.com\/blog\/blog-parte-3-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:20:49+00:00","dateModified":"2022-12-05T14:57:43+00:00","breadcrumb":{"@id":"https:\/\/fcamara.com\/blog\/blog-parte-3-crie-uma-api-rest-em-nodejs-typescript\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fcamara.com\/blog\/blog-parte-3-crie-uma-api-rest-em-nodejs-typescript\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/fcamara.com\/blog\/blog-parte-3-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-3-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 3 &#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":1348},"pll_sync_post":[],"_links":{"self":[{"href":"https:\/\/fcamara.com\/blog\/wp-json\/wp\/v2\/posts\/1348","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=1348"}],"version-history":[{"count":1,"href":"https:\/\/fcamara.com\/blog\/wp-json\/wp\/v2\/posts\/1348\/revisions"}],"predecessor-version":[{"id":6156,"href":"https:\/\/fcamara.com\/blog\/wp-json\/wp\/v2\/posts\/1348\/revisions\/6156"}],"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=1348"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fcamara.com\/blog\/wp-json\/wp\/v2\/categories?post=1348"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fcamara.com\/blog\/wp-json\/wp\/v2\/tags?post=1348"},{"taxonomy":"post_series","embeddable":true,"href":"https:\/\/fcamara.com\/blog\/wp-json\/wp\/v2\/post_series?post=1348"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}