Trong bài trước chúng ta đã tìm hiểu về hai cách để xây dựng kết nối trao đổi dữ liệu cho dịch vụ web là socket và websocket. Bây giờ chúng ta sẽ tìm hiểu về hai phương thức khác là REST và RPC.
Giới thiệu các bài viết hướng dẫn lập trình với ngôn ngữ lập trình Go. Những bài viết này được dịch chủ yếu từ cuốn The Go Programing Language của Alan A. A. Donovan và Brian W. Kernighan và tham khảo một số sách khác như Go In Action, Build Web Application with Golang và nhiều tài liệu khác trên mạng. Rất mong nhận được sự đóng góp ý kiến của mọi người.
Wednesday, November 9, 2016
Sunday, November 6, 2016
Bài 34: Các dịch vụ web
Dịch vụ web (web service) là dịch vụ cung cấp truy xuất và trao đổi dữ liệu qua môi trường web giữa các thiết bị mà không bị bó buộc bởi phần cứng hay hệ điều hành sử dụng. Điểm khác biệt giữa dịch vụ web và ứng dụng web là dịch vụ web phục vụ cho các thiết bị còn ứng dụng web phục vụ cho người dùng. Do đó ứng dụng web cần thêm giao diện đẹp, dễ dùng còn dịch vụ web chỉ cần cung cấp các API cho các thiết bị khác truy cập truy xuất thông tin. Trong bài này chúng ta sẽ tìm hiểu các phương thức trao đổi dữ liệu để xây dựng các loại dịch vụ web khác nhau: socket, websocket, REST và RPC.
Thursday, November 3, 2016
Bài 33: Mã hóa dữ liệu
Một trong những phương pháp bảo mật tốt là mã hóa dữ liệu. Dữ liệu mà mọi dịch vụ web đều phải tính chuyện mã hóa là mật khẩu người dùng. Tiếp theo là các thông tin quan trọng khi trao đổi trên môi trường mạng. Trong bài này chúng ta sẽ tìm hiểu về các loại mã hóa 1 chiều và mã hóa 2 chiều.
Wednesday, November 2, 2016
Bài 32: Bảo mật ứng dụng web
This summary is not available. Please
click here to view the post.
Bài 31: Xác thực một lần và cấp quyền với OAuth 2.0
Trong vài năm trở lại đây, các trang web và ứng dụng di động thường cho phép người dùng sử dụng tài khoản các mạng xã hội hoặc các dịch vụ phổ biến khác để sử dụng dịch vụ thay vì phải đăng ký tài khoản. Hẳn là bạn không còn ngạc nhiên khi thấy dịch vụ mới cho phép bạn dùng tài khoản Google hoặc Facebook để đăng nhập và sử dụng thay vì phải đăng ký thông tin tài khoản. Đứng ở vai trò lập trình viên web, bạn có thắc mắc sao họ làm được như vậy không? Câu trả lời thường là OAuth.
Tuesday, October 25, 2016
Bài 30: Xác thực người dùng với session
Xác thực người dùng (authentication) và cấp quyền truy cập trong phạm vi cho phép (authorization) là những yêu cầu bắt buộc trong lập trình server. Xác thực người dùng thông thường là đối chiếu thông tin tài khoản (tên và mật khẩu) người dùng gửi lên và thông tin tài khoản server đã lưu trước đó. Cấp quyền là công việc cho phép client tiếp cận những tài nguyên phù hợp với vai trò của người dùng đã xác thực trước đó. Các công việc này khá phức tạp bởi đây là vấn đề bảo mật hệ thống.
Wednesday, October 19, 2016
Bài 29: Xử lý cơ sở dữ liệu
Lưu trữ dữ liệu luôn là phần quan trọng trong bất cứ ứng dụng nào. Trong lập trình web thì server lưu giữ hầu như mọi dữ liệu. Client chỉ lưu giữ ngữ cảnh hoặc dữ liệu tạm. Dữ liệu trên server có thể là dữ liệu lưu tạm thời trên RAM (các cấu trúc dữ liệu trong ứng dụng hoặc các cơ sở dữ liệu trên RAM) hoặc lưu dài lâu trên ổ cứng (file hoặc cơ sở dữ liệu). Trong bài này chúng ta sẽ tập trung tìm hiểu cách kết nối và sử dụng các hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) và phi quan hệ (NoSQL) phổ biến: MySQL, SQLite, PostgreSQL, SQL Server, Oracle, Redis, MongoDB.
Labels:
database,
database driver,
mongodb,
mysql,
nosql,
oracle,
postgresql,
rdbms,
redis,
sql server,
sqlite
Saturday, October 15, 2016
Bài 28: Xử lý văn bản
Xử lý văn bản hoặc tạo ra văn bản là công việc thường xuyên trong lập trình web. Trong bài này chúng ta sẽ tìm hiểu những kiến thức cơ bản về xử lý văn bản trước khi tìm hiểu các phần khác trong lập trình web. Có 3 nội dung được trình bày trong bài này:
- XML
- JSON
- Mẫu HTML
Labels:
json,
marshall,
simplejson,
template,
unmarshall,
xml
Bài 27: Xử lý biểu mẫu
Trong bài trước chúng ta đã tìm hiểu về cách xây dựng một web server đơn giản. Web server hoạt động là nhằm phục vụ từ client mà một trong những client phổ biến là trình duyệt. Trong bài này, chúng ta sẽ tìm hiểu cách server nhận yêu cầu từ trình duyệt và xử lý yêu cầu. Bài này gồm có 2 nội dung chính:
- Xử lý biểu mẫu (form) HTML từ client.
- Xử lý tải file lên server.
Bài 26: Lập trình web với package net/http
Mặc dù Go được xây dựng để phát triển các ứng dụng đa mục đích nhưng với môi trường web Go có những ưu thế giúp cho lập trình viên tạo nên những ứng dụng web nhanh chóng nhưng mạnh mẽ, hiệu năng cao. Go không có thế mạnh tạo ra các ứng dụng web truyền thống đòi hỏi xử lý và tạo giao diện web nhưng với các ứng dụng back-end cho mobile và các hệ thống ứng dụng web API thì Go có thế mạnh nhất định. Trong thời kỳ bùng nổ ứng dụng điện thoại kết nối internet như hiện nay thì việc xây dựng các hệ thống web API, đặc biệt RESTful API cung cấp dịch vụ cho các ứng dụng điện thoại đang rất cần thiết. Go là môi trường lý tưởng để làm việc đó.
Bài 25: Tổng quan về web và TCP/IP
Ngày nay, khi mà internet trở nên phổ biến, các thiết bị đều có thể kết nối mạng thì nhu cầu tạo ra các hệ thống kết nối các thiết bị với nhau để phục vụ cho một mục đích nào đó là cần thiết. Lập trình dịch vụ web là công việc phát triển ứng dụng kết nối giữa các thiết bị với nhau qua môi trường web.
Trước đây, lập trình web chủ yếu là xây dựng các hệ thống trang web phục vụ nhu cầu tìm kiếm thông tin hoặc trao đổi mua bán. Khi các thế hệ điện thoại thông minh ra đời với tính năng kết nối internet có sẵn, các ứng dụng trên điện thoại không còn bó gọn trong nó nữa mà có thể kết nối với các thiết bị khác để cung cấp nhiều tiện ích hơn cho người dùng. Nhờ đó, nhu cầu xây dựng các ứng dụng có khả năng kết nối và các hệ thống máy chủ phục vụ nhu cầu kết nối qua điện thoại trở nên bùng nổ. Trong loạt bài này, tôi sẽ giới thiệu về lập trình web bằng ngôn ngữ Go.
Trước đây, lập trình web chủ yếu là xây dựng các hệ thống trang web phục vụ nhu cầu tìm kiếm thông tin hoặc trao đổi mua bán. Khi các thế hệ điện thoại thông minh ra đời với tính năng kết nối internet có sẵn, các ứng dụng trên điện thoại không còn bó gọn trong nó nữa mà có thể kết nối với các thiết bị khác để cung cấp nhiều tiện ích hơn cho người dùng. Nhờ đó, nhu cầu xây dựng các ứng dụng có khả năng kết nối và các hệ thống máy chủ phục vụ nhu cầu kết nối qua điện thoại trở nên bùng nổ. Trong loạt bài này, tôi sẽ giới thiệu về lập trình web bằng ngôn ngữ Go.
Bài 24: Gỡ lỗi ứng dụng
Việc sử dụng go test giúp chúng ta xác định tính đúng đắn của một hàm. Khi một hàm không vượt qua được việc kiểm thử, chúng ta cần phải xác định nguyên nhân để sửa lại cho đúng. Có rất nhiều cách khác nhau để xác định lỗi nhưng hai cách phổ biến nhất là xuất giá trị nghi ngờ ra màn hình và sử dụng công cụ gỡ lỗi (debuger).
Thursday, October 13, 2016
Wednesday, September 21, 2016
Bài 23: Test chương trình Go
Kiểm thử hay test chương trình là yêu cầu bắt buộc để đảm bảo chương trình hoạt động đúng logic. Việc test chương trình gồm nhiều cấp độ: test bộ phận (unit testing), test tích hợp (integration testing), test hệ thống (system testing) và test chấp nhận từ người dùng (user acceptance testing). Giai đoạn cơ bản và quan trọng nhất là test bộ phận, được bắt đầu từ trong quá trình lập trình bởi các lập trình viên. Go cung cấp công cụ go test giúp cho test bộ phận một cách tự động trở nên dễ dàng hơn bao giờ hết.
Wednesday, June 22, 2016
Bài 22: Cơ chế truyền dữ liệu giữa các goroutine
Việc trao đổi dữ liệu giữa các goroutine trong xử lý đồng thời là rất thường xuyên. Giải quyết vấn đề đó bằng cách sử dụng các biến chung rất hay được áp dụng nhưng đi kèm với nó là xử lý xung đột như đã thấy ở bài trước. Go cung cấp một cơ chế trao đổi khác giúp cho việc trao đổi dữ liệu giữa các goroutine mượt mà hơn. Đó là kênh (channel).
Thursday, June 2, 2016
Bài 21: Xử lý đồng thời trong Go
Thường thì các chương trình thực thi tuần tự các lệnh và các hàm trong main từ đầu đến cuối, lệnh trước xong sẽ đến lệnh sau cho đến khi kết thúc hàm main. Nếu có thể nên xây dựng chương trình theo hướng như vậy, vì đó là cách tạo chương trình đơn giản và dễ quản lý nhất. Tuy vậy, trong nhiều điều kiện, việc xử lý được nhiều tác vụ đồng thời là yêu cầu bắt buộc để đảm bảo chương trình hoạt động hiệu quả. Ví dụ dễ thấy nhất là khi xây dựng ứng dụng web. Tại cùng một thời điểm, ứng dụng web có thể nhận và xử lý nhiều yêu cầu từ nhiều người dùng khác nhau. Nếu cứ tuần tự thì những người được phục vụ sau sẽ khó mà chờ nổi. Xử lý đồng thời là yêu cầu không thể thiếu trong những tình huống này và Go đã cung cấp một công cụ tuyệt vời cho việc này.
Friday, May 6, 2016
Bài 20: Hướng đối tượng trong Go
Từ đầu những năm 1990, lập trình hướng đối tượng (Object-oriented programming - OOP) nở rộ và được hầu hết các ngôn ngữ lập trình ra đời từ đó hỗ trợ nó. Và Go cũng hỗ trợ lập trình hướng đối tượng theo cách riêng của Go.
Monday, May 2, 2016
Bài 19: Một số kiểu interface quan trọng trong Go
Trong bài trước chúng ta tìm hiểu về interface qua các ví dụ đơn giản để dễ hiểu. Trong bài này chúng ta sẽ tìm hiểu về các kiểu interface quan trọng, hay được sử dụng trong quá trình chúng ta lập trình bằng Go.
Tuesday, April 26, 2016
Bài 18: Kiểu interface trong Go
Tất cả các kiểu dữ liệu chúng ta đã từng tìm hiểu như số, chuỗi, mảng, ... đều là các kiểu dữ liệu cụ thể. Chúng mô tả chính xác dữ liệu mà chúng lưu giữ và các hành động đặc trưng của dữ liệu đó. Các hành động của các kiểu dữ liệu cụ thể này được mở rộng thêm nhờ phương thức (methods) mà ta đã tìm hiểu ở bài trước. Khi tạo biến gán dữ liệu chúng ta có thực thể của một kiểu dữ liệu cụ thể, chúng ta biết chính xác nó là gì và có những hành động nào. Trong bài này chúng ta cùng tìm hiểu về interface, kiểu dữ liệu mang tính khái quát, trừu tượng.
Monday, April 18, 2016
Bài 17: Phương thức trong Go
Mỗi kiểu dữ liệu chứa các dữ liệu khác nhau và các hành động tương ứng với dữ liệu đó cũng khác nhau. Go đã tạo sẵn cho chúng ta nhiều hàm để thực hiện các hành động này. Ví dụ các kiểu dữ liệu số luôn đi liền với các phép toán còn lấy chiều dài, sức chứa, thêm phần tử, sao chép phần tử đi kèm với slice, v.v... Khi các biến của từng kiểu dữ liệu được tạo, chúng trở thành những thực thể, có đời sống riêng. Lúc này nhu cầu tạo ra thêm nhiều hành động khác cho các thực thể này là có tùy theo mục đích chúng ta muốn. Bên cạnh việc tạo ra các hàm để đáp ứng nhu cầu này với thực thể là tham số truyền vào thì Go hỗ trợ một cách thức tạo hành động mới. Đó là các phương thức (methods).
Friday, April 8, 2016
Bài 16: Xử lý lỗi trong Go
Một số hàm luôn thực hiện thành công. Một số khác có thể gặp lỗi nếu tham số đưa vào hoặc giá trị nhận được trong xử lý thuộc trường hợp ngoại lệ. Nhưng có nhiều hàm mà lỗi có thể xảy ra bất kỳ lúc nào dù người viết tốt đến đâu bởi nó phụ thuộc vào các yếu tố ngoài khả năng của lập trình viên như khi đọc, xuất dữ liệu hay kết nối mạng.
Do đó xử lý lỗi khi gọi hàm luôn là vấn đề được các ngôn ngữ lập trình quan tâm và Go cũng vậy. Nhờ cơ chế hàm có nhiều giá trị trả về nên Go đề xuất dùng giá trị trả về cuối cùng là giá trị thể hiện trạng thái lỗi của hàm. Thông thường giá trị này thuộc kiểu luận lý và thường đặt tên là ok với giá trị true khi không có lỗi. So với xử lý ngoại lệ ở các ngôn ngữ khác thì cơ chế trả về giá trị lỗi đơn giản và hiệu quả hơn.
Monday, April 4, 2016
Bài 15: Một số đặc điểm hàm trong Go (tiếp theo)
Trong bài này chúng ta sẽ tiếp tục tìm hiểu về các đặc điểm hàm trong Go gồm hàm vô danh, hàm bất định và lệnh trì hoãn defer.
Bài 14: Một số đặc điểm hàm trong Go
Trong bài này chúng ta sẽ tìm hiểu về một số đặc điểm thú vị của hàm trong Go: đệ quy, kiểu dữ liệu hàm. Một số đặc điểm khác như hàm vô danh, hàm bất định và lệnh trì hoãn sẽ có trong bài tiếp theo.
Wednesday, March 30, 2016
Bài 13: Phân nhánh và vòng lặp trong Go
Trong bài này chúng ta sẽ tìm hiểu một số cấu trúc lệnh hay được sử dụng trong lập trình mà hầu như ngôn ngữ nào cũng cung cấp. Đó là phân nhánh và vòng lặp.
Bài 12: Hàm trong Go
Hàm là cách các ngôn ngữ lập trình gom nhóm các lệnh thành một khối, thực hiện một vài chức năng nhất định. Việc tạo ra hàm mang lại các lợi ích sau:
- Hàm giúp chia dự án ra thành các nhóm nhỏ mà nhiều người có thể viết cùng lúc được và ít ảnh hưởng đến nhau.
- Hàm giúp cho một chức năng nào đó được sử dụng lại đơn giản bằng cách gọi hàm thay vì lặp lại đoạn mã của chức năng đó. Việc này cũng giúp kích thước file mã nguồn giảm đáng kể nếu hàm đó được sử dụng nhiều lần.
- Hàm giúp ẩn chi tiết đoạn mã mà người viết không cho người sử dụng lại biết thông qua một số cú pháp nhất định. Chép lại đoạn mã thì không giấu gì được nữa.
Sunday, March 27, 2016
Bài 11: Kiểu dữ liệu trong Go: Slice và map
Trong bài trước chúng ta đã tìm hiểu về con trỏ. Hôm nay chúng ta tìm hiểu về 2 kiểu dữ liệu sử dụng con trỏ để mô tả thông tin của nó là slice và map.
Bài 10: Kiểu dữ liệu trong Go: Con trỏ
Một nhóm kiểu dữ liệu quan trọng trong Go là kiểu dữ liệu tham chiếu, là kiểu dữ liệu mà bản thân nó không chứa dữ liệu thật sự cần xử lý mà chứa con trỏ tham chiếu đến địa chỉ vùng nhớ lưu trữ dữ liệu. Vậy con trỏ là gì?
Saturday, March 26, 2016
Bài 9: Kiểu dữ liệu trong Go: mảng và cấu trúc
Trong bài trước chúng ta bàn về kiểu dữ liệu cơ bản trong Go: các kiểu số nguyên, thực, phức, kiểu luận lý và kiểu chuỗi. Bài này chúng ta bàn về kiểu dữ liệu tập hợp gồm mảng (array) và cấu trúc (struct). Các kiểu dữ liệu này được tạo ra bằng cách kết hợp các kiểu dữ liệu cơ bản theo các cách thức khác nhau.
Saturday, March 19, 2016
Bài 8: Kiểu dữ liệu trong Go: Kiểu chuỗi
Trong hai bài trước, chúng ta đã tìm hiểu về kiểu dữ liệu số và kiểu luận lý. Hôm nay chúng ta sẽ tìm hiểu về kiểu chuỗi. Một kiểu dữ liệu quan trọng trong Go.
Bài 7: Kiểu dữ liệu trong Go: Số thực, phức và luận lý
Trong bài 6 chúng ta đã tìm hiểu về kiểu số nguyên. Trong bài này chúng ta sẽ tìm hiểu về 2 kiểu số khác là số thực (số dấu chấm động) và số phức. Sau đó chúng ta tìm hiểu về kiểu luận lý với 2 giá trị đúng và sai.
Thursday, March 17, 2016
Bài 6: Kiểu dữ liệu trong Go: Số nguyên
Go cung cấp nhiều kiểu dữ liệu khác nhau nhằm đáp ứng nhu cập lập trình từ cơ bản đến phức tạp. Hiện tại Go cung cấp 4 nhóm kiểu dữ liệu khác nhau:
- Nhóm cơ bản: số (int, float, complex), chuỗi (string) và luận lý (boolean).
- Nhóm tập hợp: kết hợp các kiểu dữ liệu nhóm cơ bản tạo ra kiểu dữ liệu phức tạp hơn: mảng (array) và cấu trúc (struct).
- Nhóm tham chiếu: con trỏ (pointer), lát (slice), bản đồ (map), hàm (function) và kênh (channel). Đặc điểm chung của nhóm này là cùng tham chiếu đến một đối tượng hoặc trạng thái nên những xử lý tác động lên đối tượng mà nó tham chiếu thì các tham chiếu khác đến đối tượng đó đều biết được.
- Nhóm giao diện (interface): đây là kiểu dữ liệu thể hiện tổng quát hóa hay trừu tượng hóa về hành vi của các kiểu dữ liệu khác. Nó được dùng để đại diện cho các kiểu dữ liệu khác.
Monday, March 14, 2016
Bài 5: Cấu trúc file mã nguồn Go
Lập trình là chuỗi những khai báo và biểu thức. Trong bài trước, chúng ta đã thấy mỗi file mã nguồn .go gồm có 3 nhóm khai báo là khai báo package thuộc về, package sử dụng và khai báo hằng, kiểu dữ liệu, biến và hàm. Ở bài này chúng ta sẽ tìm hiểu kỹ hơn về các khai báo này trước khi đi vào tìm hiểu cú pháp cũng như những đặc tính thú vị của ngôn ngữ Go.
Saturday, March 12, 2016
Bài 4: Chương trình Go đầu tiên: Hello Go world!
Như mọi tài liệu hướng dẫn lập trình các ngôn ngữ khác, chúng ta cùng bắt đầu lập trình Go với chương trình đơn giản hiển thị chuỗi Hello Go world! lên màn hình.
Monday, March 7, 2016
Bài 3: Môi trường phát triển tích hợp (IDE) cho Go
Go có rất nhiều trình soạn thảo văn bản hỗ trợ nhận biết cú pháp hoặc các IDE hỗ trợ riêng cũng như các plugin tích hợp vào các IDE phổ biến hiện tại trên các hệ điều hành khác nhau(1):
Sunday, March 6, 2016
Bài 2: Công cụ phát triển Go
Bộ công cụ phát triển phần mềm hay thường được gọi là SDK là công cụ quan trọng nhất mà bên tạo ra một ngôn ngữ lập trình cung cấp cho chúng ta bởi thông qua công cụ này, chúng ta có thể chuyển những file mã nguồn (văn bản mà chúng ta đã viết theo cú pháp ngôn ngữ đó) thành các file thực thi được trên môi trường vừa chuyển xong hoặc trên các môi trường khác. Quá trình chuyển này được gọi là biên dịch (compling) hoặc thông dịch (interpreting).
Ngôn ngữ dùng trình biên dịch được gọi là ngôn ngữ biên dịch. C/C++, Pascal, Go, v.v... là những ngôn ngữ biên dịch. Các ngôn ngữ thông dịch như PHP, python, v.v... Java, C# là trường hợp đặc biệt khi bao gồm cả 2 quá trình biên dịch (ra mã giả) và thông dịch (từ mã giả).
Ngôn ngữ dùng trình biên dịch được gọi là ngôn ngữ biên dịch. C/C++, Pascal, Go, v.v... là những ngôn ngữ biên dịch. Các ngôn ngữ thông dịch như PHP, python, v.v... Java, C# là trường hợp đặc biệt khi bao gồm cả 2 quá trình biên dịch (ra mã giả) và thông dịch (từ mã giả).
Bài 1: Giới thiệu về ngôn ngữ Go
Go hay còn gọi golang được phát triển bởi những nhân viên google là Robert Griesemer, Rob Pike và Ken Thompson từ tháng 9/2007 và công bố vào tháng 11/2009. Mục tiêu của ngôn ngữ và các công cụ đi kèm là tạo ra một ngôn ngữ dễ thể hiện trong lập trình nhưng hiệu quả trong biên dịch và thực thi để tạo nên những ứng dụng mạnh mẽ, đáng tin cậy.
Subscribe to:
Posts (Atom)