Bài viết được sự cho phép của tác giả Duy Phan Dạo gần đây đi đâu cũng nghe nói về microservices, người người nhà nhà rục rịch chuyển dịch hệ thống sang microservices. Trước khi đưa ra sự so sánh, mình sẽ khái quát một chút về Monolith Application và MicroServices một chút cho các bạn chưa biết nắm rõ hơn nhé. Monolith Application là gì? Nó là cách phát triển ứng dụng kiểu truyền thống từ xưa tới nay, chỉ vậy thôi :D các modules của ứng dụng sẽ được phát triển và triển khai trong cùng một khối (monolith). Hiểu nôm na giống như Laravel Botble CMS của bác Sang Nguyễn, toàn bộ modules (database, services, views, notifications…) đều được gom chung vào một bộ source code. Mặc dù có cấu trúc modular khá hợp lý, nhưng nó được đóng gói và cài đặt thành một monolithic duy nhất. Khi deploy, chúng ta chỉ cần ném cái cục monolithic bự này lên server, xong rồi làm một và [...]
Read more →Bài viết được sự cho phép của tác giả Sơn Dương Bạn đã bao giờ nghe nói đến service trong Android chưa? Vậy hãy cùng mình tìm hiểu Service trong Android nhé! Hầu như bất kỳ ứng dụng Android nào cũng có thể cần làm một việc cần nhiều tài nguyên hệ thống. Mình ví dụ như ứng dụng nghe nhạc, chuyển đổi file hay download tệp từ internet… Lúc này bạn cần nghĩ đến việc thực hiện tác vụ đó dưới background thay vì main UI để tránh làm ứng dụng bị treo. Để thực hiện tác vụ chạy dưới background, bạn có nhiều cách để thực hiện trong Android. Bạn tạo một Thread hoặc Executor trong Activity. Tuy nhiên, nhược điểm của phương pháp này là Thread hay Executor sẽ không tồn tại khi Activity bị destroy. Một cách khác, đó là sử dụng AsyncTask để xử lý việc này, nhưng nếu ứng dụng của bạn cần Background Thread mà không đính với bất kì Activity nào thì [...]
Read more →Bài viết được sự cho phép của tác giả Giang Phan Ở bài viết trước, tôi đã giới thiệu với các bạn cách test REST API trong Jersey project. Giả sử bây giờ chúng ta cần sử dụng API của bên thứ 3 (không phải source code trong jersey project của chúng ta), khi đó ta không thể sử dụng Jersey Test. Khi đó, chúng ta cần một thư viện khác có thể giúp chúng ta gửi một request thật để verfiy kết quả trả về. Trong bài này tôi sẽ giới thiệu với các bạn một thư viện rất mạnh mẽ để test web service, đó chính là REST Assured. Nó cho phép chúng ta gửi một HTTP request thật và verify trên kết quả trả về một cách dễ dàng. Chẳng hạn chúng ta có một request http://localhost:8080/lotto/{id} và server trả về response JSON như sau: [caption id="attachment_52759" align="aligncenter" width="335"] Test REST Web Service[/caption] Khi đó chúng ta dễ dàng sử dụng REST Assured để verify mọi thứ từ response trên như sau: [caption id="attachment_52758" align="aligncenter" width="560"] Test REST Web [...]
Read more →1. Giới thiệu Để đảm bảo một hệ thống chạy tốt và ổn định, các việc thiết kế hệ thống như : chọn mô hình (micro, monolithic), loại database, cách truyền tải dữ liệu (message queue, http, socket,..), cách load balancing,... là việc rất quan trọng đánh dấu sự thành công của hệ thống. Song song với đó việc chúng ta thiết kế một service cũng là một mấu chốt quan trọng. Service bạn chịu trách nhiệm thiết kế có thể có các thao tác đọc ghi trên một dữ liệu tranh chấp. Khi 2 luồng của service của bạn cùng sửa một tài nguyên bị tranh chấp sẽ gây ra sự sai sót của hệ thống. Vậy khi thiết kế chúng ta cần có các kỹ thuật tránh điều này. Trong bài viết này tôi sẽ chia sẻ kinh nghiệm của mình khi thiết kế các service như vậy. Đây là phần một của bài viết sẽ nói về cách các bạn xử lý [...]
Read more →Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh Hầu hết vòng đời của một ứng dụng xoay quanh việc bảo trì. Một ứng dụng có thể mở rộng cho phép bảo trì dễ dàng, tức là nâng cấp một tính năng mà không ảnh hưởng đến toàn bộ ứng dụng. Trong bài viết này chúng ta sẽ tìm hiểu về Java Service Provider Interface (SPI) và cách chúng ta có thể áp dụng nó vào trường hợp sử dụng thực tế để tạo các ứng dụng dễ dàng mở rộng, tạo ứng dụng theo các kiến trúc module, plugin. Các thành phần của Java Service Provider Interface (SPI) Một Service Provider framework là một hệ thống trong đó nhiều nhà cung cấp dịch vụ (Service Provider) implement một Service và hệ thống này cung cấp các implement cho client sử dụng. SPI giúp giảm kết dính và che dấu thông tin giữa các thành phần của ứng dụng. Java SPI định nghĩa các [...]
Read more →Bài viết được sự cho phép của tác giả Giang Phan Trong các ứng dụng, chúng ta thường gặp trường hợp một class Client phụ thuộc vào một service hoặc một component là những lớp cụ thể (concrete class) trong lúc chạy ứng dụng. Sự phụ thuộc của class Client vào các service này sẽ có một số vấn đề cần phải giải quyết: Nếu thay thế hoặc cập nhật các service phụ thuộc, chúng ta cần thay đổi mã nguồn của class Client. Các concrete class của một phụ thuộc có thể thay đổi tại thời điểm run-time hay không? Các class cần phải viết những đoạn code cho việc quản lý, khởi tạo các phụ thuộc. Khó khăn khi viết Unit Test do các lớp được kết hợp chặt chẽ. Giải pháp cho vấn đề này chính là áp dụng Service Locator pattern, nó tạo ra một class chứa các tham chiếu đến các service và nó đóng gói các xử lý nghiệp vụ để [...]
Read more →Bài viết được sự cho phép của tác giả Lê Xuân Quỳnh Yêu cầu bài viết Đã sử dụng qua realm swift. Có kiến thức căn bản về lập trình iOS Micro-service là gì? Với những ai đang làm các dự án Backend thì khái niệm micro-service sẽ không còn xa lạ nữa. Micro-service nghĩa là chia nhỏ các service của ứng dụng thành những phần riêng biệt, độc lập với nhau để dễ dàng cho việc quản lý, release sản phẩm. Lấy 1 ví dụ, khi backend có các nghiệp vụ: đăng nhập, đăng ký tài khoản, lưu giỏ hàng, thanh toán.. thì chúng ta sẽ có thể chia các cụm micro-service như sau: Cụm authentication: đăng nhập, đăng ký nơi các nghiệp vụ xác nhận người dùng. Cụm payment: gồm lưu giỏ hàng, thanh toán chứa nghiệp vụ về mua bán sản phẩm. Khi 1 API nào ở cụm payment bị lỗi thì nó hoàn toàn không ảnh hưởng tới cụm authentication. Đó là lợi ích của việc [...]
Read more →Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh Enterprise Service Bus (ESB) là thành phần trọng tâm trong một hệ thống phân tán, giúp kết nối các thành phần, các ứng dụng khác nhau lại với nhau. Vậy cụ thể nó là gì, trong bài viết này chúng ta hãy cùng tìm hiểu nhé các bạn! Tại sao lại cần phải có ESB? Hãy tưởng tượng các bạn đang làm việc trong một hệ thống có nhiều ứng dụng và các ứng dụng đó cần được liên kết, trao đổi thông tin với nhau: ứng dụng A cần gửi một message tới ứng dụng B thông qua JMS, ứng dụng C cần gọi tới ứng dụng D để lấy thông tin cần thiết thông qua giao thức HTTP, … Tất cả các nhu cầu này được thực hiện dưới nhiều hình thức khác nhau, không cùng chung một định dạng các kiểu dữ [...]
Read more →Bài viết được sự cho phép của tác giả Trần Văn Dem Tại sao không nên dùng Http1.1 để giao tiếp giữa các service trong hệ thống có tải cao Để thiết kế một hệ thống tin cậy có thể chịu được tải cao thì chúng ta cần quan tâm rất nhiều yếu tố : database : nosql, sql, in-mem database, index, partition,... caching design service load balance ... Thời điểm hiện nay chúng ta sẽ dễ dàng tìm được các bài báo cũng như các bài hướng dẫn, so sánh về các mục bên trên. Thời điểm hiện tại đa số các hệ thống sẽ được xây dựng trên mô hình microservice nhưng khi sử dụng mô hình trên thì còn một điều khá quan trọng chúng ta cần phải quan tâm đó là cách giao tiếp giữa các service với nhau (service communicate). Khi mới bắt đầu vào lập trình hầu hết các bài báo cũng như hướng dẫn tôi được đọc thì họ đều sử [...]
Read more →Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh Mình đã hướng dẫn các bạn cách định nghĩa RESTful Web Service API specs sử dụng RAML. Có một cách khác để làm điều này là sử dụng OpenAPI Specification. Cụ thể như thế nào? Trong bài viết này, chúng ta sẽ cùng nhau tìm hiểu làm thế nào để định nghĩa RESTful Web Service API specs sử dụng OpenAPI Specification các bạn nhé! [irp posts="46705" name="Giới thiệu Feign – Tạo ứng dụng Java RESTful Client không thể đơn giản hơn"] [irp posts="48721" name="REST Web service: Tạo ứng dụng Java RESTful Client với Jersey Client 2.x"] Xem thêm các việc làm REST API hấp dẫn trên TopDev Chúng ta sẽ sử dụng tập tin YAML hoặc JSON để định nghĩa API specs với OpenAPI Specification. Dưới đây là nội dung tập tin YAML định nghĩa API specs trong bài viết Giới thiệu về RAML sử dụng OpenAPI Specification: openapi: 3.0.3 info: title: Student Information Management System version: "1.0" servers: - url: https://localhost:8081/api paths: /students: get: operationId: getStudents summary: Get all students responses: 200: description: [...]
Read more →Bài viết được sự cho phép của tác giả Lê Chí Dũng Hôm nay ôn lại bài web service vừa học trên lớp sẳn tìm kiếm thông tin về web service và mình vừa thu thập được một số thông tin hay về web service và share cho ace xem. Trước tiên là phần cơ bản về SOAP, WSDL, ASP.NET Web Service (trích từ YinYangit.wordpress.com) Web Service là gì? – Dịch vụ Web (Web Service) là một chuẩn để tích hợp các ứng dụng trên nền web (Web-based applications). Các ứng dụng có thể sử dụng các thành phần khác nhau để tạo thành một dịch vụ.Về bản chất, Web service dựa trên XML và HTTP, trong đó XML làm nhiệm vụ mã hóa và giải mã dữ liệu và dùng SOAP để truyền tải. Web Service không phụ thuộc vào platform nào, do đó bạn có thể dùng Web Service để truyền tải dữ liệu giữa các ứng dụng hay giữa các platform. Ví dụ như máy chủ chạy một trang web thương mại đ [...]
Read more →Bài viết được sự cho phép của tác giả Giang Phan Trong bài trước chúng ta đã cùng tìm hiểu cách xây dựng ứng dụng Java Restful web service với Jersey 1.x. Trong bài này, chúng ta sẽ cùng tìm hiểu cách tạo ra ứng dụng Java Restful web service với Jersey 2.x và ứng dụng Java RESTful Client sử dụng Jersey Client API để gọi tới RESTful web service. [irp posts="32819" name="4 tips học Java cơ bản nhanh nhất dành cho Beginner Developer"] [irp posts="4178" name="5 cách chia một mảng lớn thành nhiều mảng nhỏ trong Javascript"] Xem thêm tuyển dụng Java hấp dẫn trên TopDev 1. Tạo Jersey project Trong bài trước chúng ta đã tạo Restful web service sử dụng Jersey version 1.x. Trong bài này, chúng ta sẽ tạo Jersey project với version 2.x. Jersey 1.x : các thư viện nằm trong package com.sun. Jersey 2.x : các thư viện nằm trong package org.glassfish. Vào Menu File -> New -> Dynamic Web Project -> Finish. Nhấn chuột phải lên project vừa tạo -> Configure -& [...]
Read more →Bài viết được sự cho phép của tác giả Giang Phan Trong các bài viết trước, chúng ta đã cùng tìm hiểu cách xây dựng ứng dụng CRUD với RESTful Web service. Trong bài này, chúng ta cùng tìm hiểu cách upload/ download file với RESTful sử dụng Jersey version 2.x như thế nào. Xem thêm tuyển dụng Web Developer Jobs hấp dẫn trên TopDev Tạo Jersey project Chúng ta sẽ sử dụng lại project Jersey 2.x ở bài trước. Để có thể upload/ download file với Jersey, chúng ta khai báo thêm thư viện sau trong file pom.xml. 1 2 3 4 5 6 <!-- https://mvnrepository.com/artifact/org.glassfish.jersey.media/jersey-media-multipart --> <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-multipart</artifactId> <version>${jersey.version}</version> </dependency> Đăng ký sử dụng MultiPartFeature: chúng ta có thể sử dụng một trong 2 cách sau: Thêm cấu hình trong file JerseyServletContainerConfig.java Thêm cấu hình trong file web.xml JerseyServletContainerConfig.java package com.gpcoder.config; import java.util.logging.Level; import java.util.logging.Logger; import org.glassfish.jersey.jackson.JacksonFeature; import org. [...]
Read more →Bài viết được sự cho phép của tác giả Giang Phan Trong bài trước, chúng ta đã cùng tìm hiểu về xác thực và phân quyền ứng dụng sử dụng cơ chế Basic Authentication trong Jersey 2.x. Trong bài này, chúng ta cùng tìm hiểu về cơ chế Token-based Authentication sử dụng tiêu chuẩn JSON Web Token (JWT). Giới thiệu Token-based Authentication trong Jersey REST API JSON Web Token (JWT) là 1 tiêu chuẩn mở (RFC 7519), định nghĩa cách thức truyền tin an toàn giữa các ứng dụng bằng một đối tượng JSON. Dữ liệu truyền đi sẽ được mã hóa và chứng thực, có thể được giải mã để lấy lại thông tin và đánh dấu tin cậy nhờ vào “chữ ký” của nó. Phần chữ ký của JWT sẽ được mã hóa lại bằng HMAC hoặc RSA. Chi tiết các bạn xem lại bài viết “Giới thiệu Json Web Token (JWT)“. Token-based Authentication là cơ chế xác thực người dùng dựa trên việc tạo ra token – một chuỗi ký tự (thường được [...]
Read more →Bài viết được sự cho phép của tác giả Giang Phan Trong quá trình phát triển hệ thống hoặc quá trình testing, một trong những vấn đề khó khăn là khi hệ thống của bạn cần tích hợp với một bên thứ ba (3rd party). Do sử dụng API của bên thứ ba nên chúng ta có thể gặp một số vấn đề sau: Bên thứ ba không có hoặc không cung cấp hệ thống test cho chúng ta. Bên thứ 3 đang phát triển API song song với chúng ta hoặc chưa hoàn thành API cho chúng ta sử dụng. Không thể gọi API thật để test: gặp vấn đề về chi phí và bảo mật. Gọi service của bên thứ ba để viết Unit Test rất chậm và đôi khi service của họ die dẫn đến Unit Test của chúng ta failed không mong muốn. [irp posts="38660" name="AspectMock là gì? Tại sao dùng AspectMock với Codeception"] [irp posts="41349" name="Hướng dẫn tạo mock API Server với Post Man"] Xem thêm tuyển dụng Magento hấ [...]
Read more →