Hỏi về cơ sở dữ liệu và API

Chào mọi người, mình có một số thắc mắc tra google nhưng vẫn không thấy những ý trọng tâm, mong người mọi người chỉ giúp ạ !

  1. Nếu 2 web hoặc 1 web 1 app mobile dùng chung dữ liệu như thông tin người dùng thì có bắt buộc phải dùng chung 1 loại cơ sở dữ liệu như MySQL, SQLServer, … không ạ. Nếu không nhất thiết thì nếu web dùng MySQL, app mobile dùng SQLite thì dùng chung dữ liệu bằng cách nào ạ ?

  2. Nếu 1 web thao tác với cơ sở dữ liệu và tạo API cho app khác dùng chung thì API nên do phía web tạo hay do phía app tạo ạ ?

  3. MÌnh có nhận biết 2 cách chung dữ liệu bằng cách truy vấn chung từ một cơ sở dữ liệu và tạo API URL để tải, trao đổi dữ liệu. 2 cách này so với nhau thì có gì lợi và hại và ngoài 2 cách này thì còn cách nào để dùng chung dữ liệu giữa web-web, web-app không ?

Mình cảm ơn !

Bạn hiểu sai về API và cách web hoạt động rồi.
Đơn giản thì “web” mà bạn nói gồm 2 phần, frontend và backend, mỗi phần có chức năng khác nhau.
Backend chạy trên server, sẽ truy cập tới CSDL (cũng trên cùng server luôn) và cung cấp API để cho frontend hoặc app sử dụng.
Do đó, đây là câu trả lời của mình:

  1. Chỉ có một CSDL duy nhất, và chỉ có backend được phép truy cập trực tiếp. App hay web (phần frontend) chỉ sử dụng API mà backend cung cấp.
  2. API là do backend cung cấp, mà backend thuộc web nên…
  3. Xem lại câu 1, chỉ có backend mới có thể dùng CSDL.
8 Likes

Cảm ơn bạn, cho mình hỏi thêm chút là app ko thể dùng cơ sở dữ liệu thì nếu viết một app độc lập hay 1 app ios kết nối với 1 android thì 1 trong chúng phải dùng csdl quản lý, vậy nên hiểu thế nào ạ !

App độc lập thì có thể dùng CSDL ở local (trên máy cài app), lúc này thì CSDL không được dùng chung.
Nếu muốn dùng chung CSDL giữa các app, hoặc cùng 1 app mà các máy khác nhau, thì bạn nên dùng server và API như trên.
Còn trường hợp 1 máy iOS và Android kết nối với nhau để chia sẻ dữ liệu thì theo mình không ổn lắm, sẽ có nhiều vấn đề phát sinh. Nên tốt nhất vẫn là có 1 CSDL chung, 1 server backend để cung cấp API cho cả 2 app.

5 Likes

Máy AAA có cài mySQL, có cái database tên là database_1, chứa thông các tỉnh thành VN
May BBB có cài MongoDb, có cái database tên là database_2, chứa thông tin users
Máy CCC cài 1 cái webserver, và trên máy này, ví dụ người ta viết 1 cái back-end bằng python/djangle

Khi viết cái backend này, người ta cho ra 1 cái link, ví dụ https://ccc/api/user/{username}

Khi bạn từ máy laptop DDD hay từ 1 cái app trên điện thoại EEE, gửi https request tới cái link đó, thì cái backend nó sẽ tìm thông tin của thằng {username} đó trong database_2, rồi lấy luôn thông về tỉnh thành/quê của thằng đó trong database_1, sau đó trả kết quả về (thường là sẽ trả về file JSON, tất nhiên là tuỳ thằng làm backedn nó thích hay không)

Sau đó thằng client trên DDD hay EEE sẽ xử lý thông tin từ file JSON đó để ra kết quả cần. (bạn có thể xư lý và save thông tin đó vào cái sql-lite trên mobile luôn nếu muốn)

Người ta gọi cái link
https://ccc/api/user/{username}
là cái API

Điều đó nghĩa là ai cũng có thể gọi API được, nên bạn sẽ quan tâm tới cái gọi là " API Authentication"

Máy AAA, BBB, CCC có thể gom thành 1 cũng được, chứ không nhất thiết phải là 3 máy. Mình chỉ ví dụ để thấy là bao nhiêu database nó cũng không liên quan lắm.

8 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?