FreeShare

Viết restfull và graphql api bằng express

Chủ nhật, 18/02/2024
image
Nodejs bản chất là code javascript được viết ở trên server express là 1 framework của nodejs Restfull api là gì Là một tiêu chuẩn dùng trong việc thiết kế API cho các ứng dụng web REST hoạt động chủ yếu dựa vào giao thức HTTP. Các hoạt động cơ bản nêu trên sẽ sử […]

Nodejs bản chất là code javascript được viết ở trên server

express là 1 framework của nodejs

Restfull api là gì

Là một tiêu chuẩn dùng trong việc thiết kế API cho các ứng dụng web

REST hoạt động chủ yếu dựa vào giao thức HTTP. Các hoạt động cơ bản nêu trên sẽ sử dụng những phương thức HTTP riêng.

  • GET (SELECT): Trả về một Resource hoặc một danh sách Resource.
  • POST (CREATE): Tạo mới một Resource.
  • PUT (UPDATE): Cập nhật thông tin cho Resource.
  • DELETE (DELETE): Xoá một Resource

Status code

Khi chúng ta request một API nào đó thường thì sẽ có vài status code để nhận biết sau:

  • 200 OK – Trả về thành công cho những phương thức GET, PUT, PATCH hoặc DELETE.
  • 201 Created – Trả về khi một Resouce vừa được tạo thành công.
  • 204 No Content – Trả về khi Resource xoá thành công.
  • 304 Not Modified – Client có thể sử dụng dữ liệu cache.
  • 400 Bad Request – Request không hợp lệ
  • 401 Unauthorized – Request cần có auth.
  • 403 Forbidden – bị từ chối không cho phép.
  • 404 Not Found – Không tìm thấy resource từ URI
  • 405 Method Not Allowed – Phương thức không cho phép với user hiện tại.
  • 410 Gone – Resource không còn tồn tại, Version cũ đã không còn hỗ trợ.
  • 415 Unsupported Media Type – Không hỗ trợ kiểu Resource này.
  • 422 Unprocessable Entity – Dữ liệu không được xác thực
  • 429 Too Many Requests – Request bị từ chối do bị giới hạn

Graphql là gì

graphql là dựa trên yêu cầu của client gửi lên những dữ liệu nào cần thiết thì server chỉ trả về các trường dữ liệu đó. Resfull api thì trả về tất cả các dữ liệu đầy đủ.

graphql chỉ dùng cho việc get các dữ liệu còn việc thêm sửa xoá thì vẫn dùng resfull api

Typescript là gì

TypeScript là gì? – Là một ngôn ngữ được Microsoft tặng free cho chúng ta, nền tảng của TypeScript ít nhiều cũng có sự liên quan đến JavaScript vì nó là một ngôn ngữ mã nguồn mở của JavaScript. Vai trò của TypeScript là dùng để thiết kế và xây dựng các dự án ứng dụng quy mô lớn mang tính chất phức tạp.

Các kiểu dữ liệu được sử dụng phổ biến nhất:

  • Any – Một biến với kiểu này có thể có giá trị là một string, number hoặc bất kỳ kiểu nào.
  • String – Giống chức năng của string trong JavaScript, có thể được bao quanh bởi ‘dấu nháy đơn’ hoặc “dấu nháy kép”.
  • Number – Tất cả giá trị số trong hàm đều được biểu diễn bởi kiểu number, không có định nghĩa riêng cho số nguyên (interger), số thực (float) cũng như các kiểu khác.
  • Boolean – true hoặc false, sử dụng 0 và 1 sẽ gây ra lỗi biên dịch.
  • Arrays – Có 2 kiểu cú pháp: my_arr: number[]; hoặc my_arr: Array<number>.
  • Void – sử dụng khi hàm không trả lại bất kỳ giá trị nào.

ES6 là gì

ECMAScript 6 (hay còn được gọi là ES6, ES2015) là phiên bản mới nhất của chuẩn ECMAScript. Chuẩn này được phê duyệt vào tháng 6/2015. Nó là một bản nâng cấp quan trọng cho ES kể từ ES5 đã được chuẩn hoá vào năm 2009.

Các tính năng của es6:

  • Block

như es5 thì sử dụng cách khai báo biến var, es6 phát triển thêm các kiểu khai bào biến let và const các kiểu khai báo này khác biệt ở chỗ là nó giới hạn scope sử dụng biến đó

  • Arrow function

es5 sử dụng tên hàm là function thì es6 chuyển thành dùng dấu mũi tên như =>

const ham = ()=>{
// xu ly logic
}
  • Template Literals

Bình thưởng sử dụng nối string như "Hello " + name nay chuyển thành `Hello ${name}`

  • Destructuring Assignments

là tính năng tách các phần tử của Array hoặc Object thành nhiều biến chỉ bằng một đoạn code duy nhất

let date = [8,7,2022]
let [d,m,y] = date
console.log(a,m,y) // result 872022
  • Set gía trị mặc định

sử dụng dấu ||. set ví dụ sau

let ten = fullname || "Tran Van A"

biến fullname chưa được khai báo hoặc có giá trị undefined, null thì biến ten sẽ có giá trị Tran Van A

  • Rest Parameters

có nghĩa là bạn có thể khai báo một hàm với số lượng tham số không xác định, đây là một tính năng mới khiến Javascript ngày càng trở nên mạnh mẽ hơn. Để khai báo các tham số còn lại của một function thì bạn đặt 3 dấu chấm

const ham = (biena, bienb, ...other)=>{
console.log(biena, bienb, other)
}
ham("1", "2", "3", "4")

... còn có tác dụng copy các phần tử trong mảng

let array1 = [1,2]
let array2 = [3,4]
let aray3 = [...array1, ...array2]
console.log(array3) // [1,2,3,4]
  • Multi-line String
var content = `ten toi la
Tran Tien
`
console.log(content);
  • Enhanced Object Literals

ES6 mang lại khả năng mô tả object một cách gọn gàng hơn

xét ví dụ sau

es5 thì viết như

function createSinger (name, age, address, salary) {
  return {
   name : name,
   age : age,
   address : address,
   salary : salary,
   ...
   }
}

es6 thì

const createSinger = (name, age, address, salary) => {
  return {
   name,
   age,
   address,
   salary,
   ...
  }
}
  • Promise và async await

Trong js nhiều trường hợp code chạy bất đồng bộ . mà mình lại làm chức năng mà kết quả của các biến phụ thuộc lẫn nhau nên Promise và async await ra đời

ví dụ sử dụng promise

const promise = new Promise(function(resolve, reject){
    resolve('Success!');
});
promise.then((success)=>{
        console.log(success);
    }
);

trường hợp reject

const promise = new Promise((resolve, reject)=>{
    reject('Error!');
});
 
 
promise.then(success=>{
        console.log(success);
    }
).catch(error=>{
console.log(error)
});

ví dụ về async await

let ham = async ()=>{
let a  = await callfunc1();
let b = await callfunc2();
const c = a + b
return c
}
  • Class in ES6

ví dụ minh hoạ

class Rectangle {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
  
  get area() {
    return this.calcArea();
  }

  calcArea() {
    return this.height * this.width;
  }
}

const square = new Rectangle(10, 10);

console.log(square.area);

Tham khảo source code tại đây