Bài viết được sự cho phép của tác giả Sơn Dương Trong thế giới công nghệ số ngày nay, API (Application Programming Interface) là cầu nối quan trọng giữa các ứng dụng, cho phép chúng tương tác và trao đổi dữ liệu một cách dễ dàng. Tuy nhiên, cùng với sự phát triển nhanh chóng của API, bảo mật cũng trở thành một vấn đề không thể xem nhẹ. Bảo mật API không chỉ là một khía cạnh quan trọng mà còn là yếu tố sống còn để bảo vệ dữ liệu và thông tin nhạy cảm. Tại sao bảo mật API lại quan trọng? Các API thường là mục tiêu chính của những kẻ tấn công. Nếu một API không được bảo mật đúng cách, thông tin cá nhân của người dùng, dữ liệu tài chính, hoặc thông tin nhạy cảm của doanh nghiệp có thể bị rò rỉ hoặc bị xâm nhập. Ví dụ, một ứng dụng [...]
Read more →Bài viết được sự cho phép của tác giả Tống Xuân Hoài Vấn đề Các mô hình ngôn ngữ lớn (LLM) là các mô hình học sâu rất lớn, được đào tạo trước dựa trên một lượng dữ liệu khổng lồ. Các mô hình ngôn ngữ lớn vô cùng linh hoạt. Một mô hình có thể thực hiện các tác vụ hoàn toàn khác nhau, ví dụ như trả lời câu hỏi, tóm tắt tài liệu, dịch ngôn ngữ và hoàn thành câu. Một trong những LLM rất phổ biến là của ChatGPT. Nhờ có API của ChatGPT mà có thể tích hợp nó vào trong ứng dụng của mình, tạo ra nhiều tính năng thông minh và đột phá. Ví dụ như làm công cụ dịch văn bản, làm chatbot, hoặc tạo ra các nghiệp vụ xử lý logic bằng ngôn ngữ tự nhiên. Tuy nhiên các cuộc gọi API đến ChatGPT là mất tiền. Cần phải trả [...]
Read more →Bài viết được sự cho phép của tác giả Duy Phan Một API cho phép giao tiếp hai chiều giữa các ứng dụng phần mềm thông qua các requests. Một Webhook là một API nhẹ, hỗ trợ chia sẻ dữ liệu một chiều được kích hoạt bởi các events. Một API cho phép giao tiếp hai chiều giữa các ứng dụng phần mềm thông qua các requests. Một Webhook là một API nhẹ, hỗ trợ chia sẻ dữ liệu một chiều và thường được kích hoạt bởi các events. Khi kết hợp cùng nhau, chúng cho phép các application chia sẻ dữ liệu và function, giúp cho các services đạt được kết quả to lớn hơn tổng các thành phần của chúng. API và Webhook đều cho phép các hệ thống phần mềm khác nhau đồng bộ và chia sẻ thông tin. Khi các ứng dụng phần mềm trở nên ngày càng kết nối, điều quan trọng là các nhà phát triển hiểu rõ [...]
Read more →Bài viết được sự cho phép của tác giả Trần Nhật Trường Giới thiệu Kubelet là một agent trong từng node, có tác dụng quản lý tất cả container. Kubelet được giám sát, điều khiển bởi Control plane (hay còn gọi là Master), dùng để quản lý các node và các pod trong cluster. [caption id="attachment_61021" align="aligncenter" width="538"] Kiến trúc tổng quan Kubernetes[/caption] Ôn lại các kiến thức của Kubernetes, ta sẽ có một số khái niệm như cluster (cụm). Các cluster sẽ chứa các node (nút), cung cấp tài nguyên và quản lý các node. Các node chứa các pod. Các container được chạy trên các pod. Kube-apiserver là một thành phần của control plane, nó là front end của control plane, cung cấp giao diện API cho các thành phần khác giao tiếp với control plane. [caption id="attachment_61020" align="aligncenter" width="1024"] Kiến trúc của node[/caption] [caption id="attachment_61019" align="aligncenter" width="686"] Mối liên hệ giữa cluster và node[/caption] Nguyên nhân Nhìn trên kiến trú [...]
Read more →Bài viết được sự cho phép của tác giả Mai Đông Giang Trong việc phát triển ứng dụng hiện đại thì tần suất làm việc với RestAPI rất thường xuyên. Hôm nay, mình xin chia sẻ với các bạn cách tạo 1 ứng dụng Reactjs demo làm việc với dữ liệu được lấy từ API. Tạo 1 dự án Reactjs Việc đầu tiên chúng ta tạo 1 dự án mới. Bạn nào đang thao tác với các dự án cũ thì có thể bỏ qua bước này. Mình dùng lệnh tạo dự án npx create-react-app react-getapi. Bạn nào thấy lạ thì có thể xem qua bài viết giới thiệu về `npm` của mình tại đây để hiểu thêm nhé. Di chuyển vào thư mục dự án vừa tạo cd react-getapi. Cài đặt thư viện Bootstrap Mình sẽ cài đặt gói thư viện này để trình bày giao diện cho đẹp và nhanh hơn. Bạn chạy lệnh sau yarn add bootstrap. [irp posts="31804" name="Hướng dẫn sử dụng ReactJS Props và State"] [irp posts="31006" [...]
Read more →Bài viết được sự cho phép của tác giả Tống Xuân Hoài Vấn đề Khi viết chương trình, chúng ta có các Design Pattern nên hoặc thậm chí cần được tuân theo để giúp cho mọi người trong nhóm có thể hiểu và phối hợp với nhau một cách nhịp nhàng. Các "mẫu thiết kế" là minh chứng rõ nhất cho việc đọc hiểu dễ hơn khi con người chúng ta cùng chung một lối suy nghĩ. Design API cũng vậy, việc tạo ra hàng tá endpoint trong một khoảng thời gian là khá dễ nhưng làm sao để duy trì được sự thống nhất trong suốt quá trình phát triển mới là điều khó. Dự án phát triển theo năm tháng, con người cũng thay đổi, càng có nhiều bộ óc tham gia vào quá trình, càng có nhiều tính cách được bộc phát qua những dòng code. Thực tê, Design API phụ thuộc vào tính sáng tạo của từng cá nhân, tổ [...]
Read more →API (Application Programming Interface) là một công cụ quan trọng, giúp các lập trình viên tiết kiệm thời gian và công sức, nâng cao hiệu quả công việc và sáng tạo ra các ứng dụng mới. Trong bài viết này, chúng ta sẽ cùng khám phá top 8 nguồn API hữu ích hỗ trợ anh em developer xây dựng một số tính năng trên web/app dễ dàng hơn. API là gì? Vì sao developer cần sử dụng API? API, hay Application Programming Interface, là một tập hợp các quy tắc và giao thức cho phép các phần mềm khác nhau tương tác và giao tiếp với nhau. Nó giúp xây dựng một cầu nối giữa các ứng dụng khác nhau, cho phép chúng trao đổi dữ liệu và chức năng mà không cần biết chi tiết bên trong của nhau. Vậy tại sao developer cần sử dụng API? Tiết kiệm thời gian và công sức: API giúp developer tiết kiệm thời [...]
Read more →Bài viết được sự cho phép của tác giả Sơn Dương Phần tiếp theo của khóa học Lập trình Node.js cơ bản, mình sẽ hướng dẫn các bạn học cách kết hợp Nodejs với cơ sở dữ liệu, nổi bật nhất là MongoDB. Để các bạn dễ hình dung, chúng ta sẽ cùng nhau tạo RESTful API đơn giản bằng Nodejs + MongoDB. Khi chúng ta xây dựng ứng dụng Web hay các ứng dụng phía server, việc tạo RESTful API để tương tác với client trở lên vô cùng phổ biến. Ở bài viết này, mình sẽ tạo RESTful API hỗ trợ đủ 4 actions: CRUD ( Create – Read – Update – Delete). OK, sau khi môi trường lập trình đã sẵn sàng, chúng ta bắt tay vào tạo RESTful API thôi! #Tạo RESTful API Tạo RESTful API là một kiểu thiết kế ứng dụng trong đó quy định định dạng của địa chỉ URL và phương thức HTTP sử dụng để quản lý tài nguyên trên server. Tài nguyên trên Server trong bà [...]
Read more →Bài viết được sự cho phép của tác giả Tống Xuân Hoài Vấn đề Việc tích hợp với API của bên thứ ba có lẽ không còn xa lạ gì với nhiều người. Tùy vào hệ thống sắp sửa phải liên kết mà có cách triển khai và gọi khác nhau, như phương thức HTTP, xác thực client, quyền hạn được truy cập vào những endpoint nào… Mỗi bên, họ đều có những quy tắc và yêu cầu mà chúng ta cần tuân thủ nếu muốn có các cuộc gọi thành công. Không biết trong đây có bạn đọc nào đã từng tích hợp API của Google chưa chứ tôi thì có vài lần rồi. Lần đầu tiên là gọi API của Google Sheets, cần ghi được dữ liệu vào Sheets riêng tư của người dùng. Thời gian đầu, phải bỏ ra một vài ngày để nghiên cứu cách làm, đọc tài liệu của Google thì bị "loạn [...]
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 →Bài viết được sự cho phép của tác giả Trần Hữu Cương 1. Functional Interface là gì? Functional Interface là interface có duy nhất 1 method trừu tượng (có thể có thêm các method không trừu tượng bằng từ khóa default trong Java 8) Ví dụ: Comparable là 1 Functional Interface với method trừu tượng duy nhấtcompareTo; Runnable là 1 Functional Interface với method trừu tượng duy nhất run… Về annotation @FunctionalInterface: nó được dùng ở trước mỗi interface để khai báo đây là 1 functional interface. @FunctionalInterface public interface Runnable { public abstract void run(); } Việc dùng annotation @FunctionalInterface là không bắt buộc nhưng nó giúp đảm bảo cho quá trình compile. Ví dụ bạn khai báo @FunctionalInterface nhưng trong interface lại có nhiều hơn 2 method trừu tượng thì nó sẽ báo lỗi. [irp posts="50412" name="Giới thiệu về GraphQL. Cách giải quyết những hạn chế của RESTful API"] [irp posts="45721" name="Refactoring Design Pattern với tính năng mới trong Java 8"] 2. Functional Interface API trong Java 8 Java 8 xây dựng sẵn một số functional interface và nó được dùng nhiều trong các biểu thức lambda: 2.1. java.util.function.Consumer [...]
Read more →Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh Khi làm việc với RESTful APIs, cho một đối tượng data, chúng ta thường phải expose nhiều request URLs khác nhau. Ví dụ, bạn đang làm việc với ứng dụng quản lý thông tin sinh viên, để provide thông tin sinh viên thông qua RESTful APIs, chúng ta có thể sẽ phải expose một số request URLs sau: Danh sách toàn bộ sinh viên với đầy đủ các trường thông tin Danh sách tên của tất cả sinh viên Danh sách sinh viên của một lớp học nào đó … Cứ mỗi một nhu cầu lấy thông tin khác nhau của thông tin sinh viên này, chúng ta lại phải expose thêm mới một request URL. Thêm nữa, cho một request URL, ví dụ như request URL để lấy thông tin toàn bộ sinh viên với đầy đủ các trường thông tin, thì cũng không phải tất cả các trường thông tin của sinh viên đều được sử [...]
Read more →Bài viết được sự cho phép của tác giả Huy Trần Thường thì khi cần test API, chúng ta sẽ dùng các HTTP client như là Postman, tuy nhiên cái này có một nhược điểm đó là nó... xài GUI. Và một Vim user chân chính sẽ rất là không thoải mái nếu cứ phải nhảy qua nhảy lại giữa màn hình terminal và một ứng dụng GUI củ chuối nào đó. Một giải pháp để bạn vẫn được yên phận với màn hình terminal đen ngòm đó là dùng curl. Tuy nhiên đời chỉ đẹp nếu ta xài curl với những request đơn giản, vài ba params nho nhỏ. Trong trường hợp một request có hàng chục parameters, hoặc truyền vào vài ba cái header mỗi cái dài hơn trăm kí tự thì chắc không ai đủ kiên nhẫn để xài curl nữa. Trước thực trạng nhức nhối này thì mình tính viết một plugin cho Vim để xài, ý tưởng là viết sẵn cấu [...]
Read more →Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh Sau khi định nghĩa API specs với RAML, chúng ta có thể sử dụng Spring MVC-RAML Maven plugin để generate API contract. Với API specs sử dụng OpenAPI Specification thì các bạn có thể sử dụng OpenAPI Generator Maven plugin để làm điều này. Cụ thể như thế nào? Chúng ta sẽ cùng nhau tìm hiểu trong bài viết này các bạn nhé! Đầu tiên, mình sẽ tạo mới một Spring Boot project với Web dependency: để làm ví dụ. Kết quả: Để làm ví dụ, mình sẽ sử dụng API specs được định nghĩa trong bài viết Cơ bản về định nghĩa RESTful Web Service API specs sử dụng OpenAPI Specification. Các bạn có thể lấy nội dung của API specs này ở đây, copy tất cả các tập tin, folder vào thư mục src/main/resources/api của project của chúng ta: Bây giờ chúng ta sẽ khai báo OpenAPI Generator Maven plugin cơ bản như sau: <plugin> <groupId>org.openapitools</groupId> <artifactId>openapi-generator-maven-plugin</artifactId> < [...]
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 →