Thư viện đặt vé xe cho đại lý (agency)

Dear anh em, H có gần 4 năm làm về mảng xe khách nên cũng có chút chút kinh nghiệm chia sẻ lại cho anh em nào đang tham gia cộng tác hoặc chuẩn bị triển khai hệ thống cho hãng xe nào đó.

Lời đầu tiên là H thấy mọi người ít chia sẻ mã nguồn hay idea để implement hệ thống lắm. Một là do bí quyết nghề nghiệp, hai là source code có điểm dở và sợ bị hack.

Riêng H thấy, source code dở là chuyện đương nhiên luôn rồi cho dù có cố gắng giấu giếm cũng không được gì. 😀 Anh em cũng thừa nhận điều đó đúng không? Thay vì giấu, thà mình share ra cho mọi người cùng sử dụng và cải tiến mỗi ngày cho nó ngon lành hơn.

H xin tiên phong share trước một source code mà H đã build dùng để kết nối nhà xe với các đại lý bán vé (H gọi là Agency).

pi5xrzpkT

Ý tưởng của H là một API trung tâm để:

  1. Nhà xe có thể publish các ghế/giường lên để bán.
  2. Đại lý vào query xem ghế/giường còn trống để hiển thị lên ứng dụng của chính đại lý đó.
  3. Đại lý book ghế/giường và thông tin được push qua bên nhà xe để nhà xe biết ghế/giường đó đã được giữ chỗ/thanh toán,…

Về mặt dữ liệu qua lại được build theo 2 cơ chế:

  1. Kiểu bình thường là gọi API trả kết quả.
  2. Xây một hoặc vài cái queue để push dữ liệu vào đó, ứng dụng của mỗi bên sẽ lắng nghe và xử lý.

Giao thức kết nối thì API hỗ trợ được:

  1. Chuẩn JSON phổ biến
  2. Chuẩn XML, SOAP cho các developer nào thích dùng.
  3. Protocol Buffer (Google)
  4. Message Pack, Wire format
  5. CSV
  6. HTML5 format

Hỗ trợ các plugin cần thiết cho việc develop như tích hợp Postman, Slack, Swagger,…

Khả năng nâng cấp và phát triển hỗ trợ việc deploy ứng dụng .Net

  1. Windows: IIS
  2. Linux: Mono + FastCGI
  3. Cross-flatform: .Net Core

Hiện tại source mới implement được phần API cơ bản các function, còn lại các cơ chế publish/subcribe.

Anh em ai hứng thú thì trao đổi cùng phát triển tiếp nhé.

Source: https://github.com/hoaihuongbk/agency

Demo: http://sagency.azurewebsites.net/api/metadata

(hiện tại demo không vô được vì account Azure free đã hết $)

Xác thực với ServiceStack

Chào anh em, nay H có thời gian chia sẻ tiếp về kinh nghiệm sử dụng ServiceStack của H cho mọi người. Hi vọng anh em có thêm vài keyword khi bắt đầu code một API nào đó.

Hình dung tổng thể về một user khi register account và authenticate với hệ thống như hình bên dưới.

Về tầng services, ServiceStack có 2 built-in services

  1. Register service: dùng để đăng ký user.
  2. Auth service: dùng để xác thực user.

ServiceStack hỗ trợ rất nhiều cơ chế xác thực phổ biến hiện tại như:

  1. Credentials: form đăng nhập username/password.
  2. Basic: kiểu truyền username/password trên header của request (kiểu này giống như kiểu làm của SOAP ngày xưa).
  3. OAuth như Facebook, Google, Twritter, GitHub,…nói chung là các mạng xã hội có hỗ trợ xác thực dạng third-party.
  4. ServiceStack cũng mới hỗ trợ thêm các kiểu xác thực API Key và Json Web Token (JWT) rất là hay.

(Tham khảo thêm tại http://docs.servicestack.net/authentication-and-authorization)

Đường dẫn gọi xác thực cũng rất đơn giản: /api/auth/{provider}. Ví dụ:

/api/auth/credentials

Về user thì ServiceStack có sẵn built-in repository: IUserAuthRepository có thể cấu hình để lưu xuống Redis, Memory hoặc OrmLite. Đặc biệt nữa như bài trước H có đề cập là OrmLite có các adapter xuống các DBMS như MySQL, SQL Server, SQL Lite, PostgreSQL.

Ngoài ra, anh em cũng có thể tự build riêng cấu trúc khác tùy ý. Lời khuyên của H là anh em nên dùng luôn built-in để tiện sử dụng vì cấu trúc field lưu trữ cũng có nhiều field phổ biến như FullName, Birthday, Avatar,…

Về session bài trước H có đề cập là độc lập hoàn toàn với session truyền thống của ASP.Net. Anh em có thể dùng đồng thời 2 biến SESSION và session của ServiceStack được lưu trong Cache.

Về Cache thì ServiceStack hỗ trợ Memory (dành cho môi trường dev) và Redis, Memcached (dùng cho môi trường production). Riêng H dùng Redis vì qua sử dụng cảm nhận nó rất là good và quần hùng cũng ca ngợi nó rất nhiều trên các diễn đàn công nghệ.

Sơ lược qua một vài điểm như thế để anh em hình dung…khi nào bắt tay vào làm mà có gì thắc mắc thì cứ hú H để trao đổi thêm nhé.

Chào thân ái và đoàn kết !

 

Khởi đầu với ServiceStack

Chào anh em, đã lâu lắm rồi H không có viết blog, công việc bận rộn cuốn con người ta đi xa quá. 🙂

Nay H muốn quay lại viết và chia sẻ những kiến thức mà H đã trãi nghiệm khi xây dựng các sản phẩm ở 2 công ty gần nhất H tham gia, chuyên về lĩnh vực vận tải hành khách đường bộ và giao nhận hàng hóa.

Khởi đầu cho sự quay lại, H muốn giới thiệu tới anh em một framework mà H thích nhất khi làm .Net đó là ServiceStack. Trước đây H có làm Entity Framework – Code first nhưng gặp nhiều vấn đề về tối ưu hóa và performance trong vận hành không tốt, không biết EF6, EF7 ra sau này như thế nào, hồi đó H xài EF5.

logo

ServiceStack là một framework .Net chuyên dùng để build hệ thống dạng API hỗ trợ nhiều định dạng XML, JSON, JSV, CSV, Soap. H thường hay dùng JSON và CSV, mấy cái kia không biết dùng.

Tìm hiểu thêm ở đây http://docs.servicestack.net/why-servicestack

Với H ServiceStack giúp H build nhanh hệ thống từ khâu thiết kế database nghiệp vụ xong và có thể create project -> cấu hình một số plugin và connection là có thể code service được rồi.

untitled

Trên hình là những thứ mà ServiceStack có, đủ đồ chơi cho anh em thỏa sức sài.

ServiceStack cũng dùng code first như EF nhưng sử dụng OrmLite mà theo những bài viết H đọc thì được đánh giá rất cao về hiệu suất, cách sử dụng thì các câu query cũng viết theo kiểu LINQ tương tự như EF.

OrmLite có thể kết nối được SQL Server, MySQL, SQL Lite, …đủ kiểu. Các dự án H làm thì sử dụng SQL Server và MySQL.

Bộ Authentication tích hợp sẵn của ServiceStack với đầy đủ các kiểu:

+ Credentials kiểu form post username/password truyền thống

+ Basic kiểu truyền header username/password (network credentials)

+ Social: Facebook, Google, Twiter, Github, Linkedin, Instagram

+ API Key (cái này mình rất thích mà nó cũng mới hỗ trợ gần đây)/

+ JWT Tokens (cái này mình chưa xài nhưng nghe bảo hay lắm)

Một điểm đặc biệt mà mình thích ở ServiceStack là việc quản lý session hoàn toàn độc lập với web server. Session được lưu trong cache và có thể chia sẻ giữa các ứng dụng với nhau và không phải lo sự khác biệt về cấu hình môi trường web server deploy.

Về cache thì hỗ trợ Redis, Memcached, Azure, DynamoDB, ORMLite RDBMS,…H thì sử dụng Redis cho toàn bộ các phần cache và lưu trữ session. ServiceStack cũng hỗ trợ RedisNativeClient cho phép call các lệnh redis native, có cả hỗ trợ GEO nữa. H dùng Redis GEO cho API tìm taxi gần nhất.

Còn nhiều cái hay nữa mà khi nào các bạn bắt tay vào làm thì khám phá thêm hỉ?

Riêng H thấy ServiceStack tóm tắt một số điểm : (theo góc nhìn hệ thống client -> server)

  1. Về phía server: ServiceStack hỗ trợ developer có thể build API dựa trên các resources hoặc hệ thống đã có sẵn, hỗ trợ rất nhiều kiểu kết nối và adapter tới các DBMS phổ biển như SQL Server, MySQL, PostgreSQL, Oracle, Firebird. Hệ thống cũ đang dùng MySQL thì không thể chờ chuyển hết qua SQL Server để code hệ thống mới mới. ServiceStack OrmLite hỗ trợ adapter MySQL, giúp bạn xây dựng hệ thống mới độc lập mà không ảnh hưởng tới việc vận hành hệ thống cũ.
  2. Về phía client: ServiceStack hỗ trợ nhiều phương thức serialize/deserialize: XML, JSON, CSV, MessagePack, Protobuf và mới đây có Wire (chưa thử mà nghe nói cũng là binary serialization nhưng không cần định nghĩa thứ tự các field trong POCO).
  3. Về việc deploy: ServiceStack hỗ trợ build code dưới dạng ASP.Net Application chạy trên IIS, Seft-hosting kiểu Console Application, Windows Service. Gần đây ServiceStack 4.5.4 đã hỗ trợ ASP.Net Core cho phép chạy API cross-flatform trên Windows, Linux, Mac và Docker.

Một số cái khác như Gateway, Consule, Encrypt message H sẽ chia sẻ tiếp trong các bài viết tiếp theo.

Anh em theo dõi thêm ở đây nhé: http://docs.servicestack.net/ rất chi tiết và dễ hiểu.

Về license thì không có mắc, anh em mua gói Indie là đủ xài rồi https://servicestack.net/pricing

Chúc anh em thành công nhé !