Đang xử lý.....

Tìm hiểu về việc sử dụng giao diện lập trình ứng dụng để trích xuất dữ liệu từ cổng dữ liệu mở  

Việc cung cấp dữ liệu mở dưới dạng giao diện lập trình ứng dụng (API) là nội dung được nhiều nước quan tâm và tiến hành. Để học tập kinh nghiệm của các nước, việc khảo sát và tìm hiểu thông tin trên các cổng dữ liệu mở của các nước liên quan nội dung trên là một việc làm cần thiết. Bài viết này sẽ tập trung tìm hiểu kinh nghiệm của New Zealand trong nội dung quy đinh về sử dụng API cho các tập dữ liệu mở trên cổng dữ liệu mở của quốc gia này.
Thứ Sáu, 16/12/2022 114
|

Có hàng ngàn bộ dữ liệu trên Data.govt.nz. Chúng có sẵn ở định dạng máy, con người có thể đọc được và có thể được tải xuống ở định dạng phù hợp dưới dạng tệp. Giao diện lập trình ứng dụng (API) cũng được tích hợp vào Data.govt.nz. Về cơ bản, API là một cách để kết nối dữ liệu đặc tả và bộ dữ liệu dữ liệu thực tế (cho phép máy có thể đọc được) trong danh mục để người dùng có thể sử dụng nó ở nơi bạn muốn. Ưu điểm của API là mỗi khi tập dữ liệu được các cơ quan cập nhật, nếu người dùng đang sử dụng dữ liệu này thì dữ liệu cũng sẽ được cập nhật. Ví dụ: nếu người dùng xây dựng một trang web hiển thị tất cả các điểm dừng xe buýt ở khu vực Wellington, khi tập dữ liệu điểm dừng xe buýt được sửa đổi để thể hiện có sự thay đổi về bất kỳ điểm dừng xe buýt mới hoặc đã đóng cửa thì thông tin người dùng sử dụng thông qua API cũng sẽ được cập nhật. Dữ liệu và dữ liệu đặc tả mà người dùng truy cập qua API data.govt.nz được cấp phép theo cùng một giấy phép với phiên bản tập dữ liệu có thể tải xuống.

Các API data.govt.nz được xây dựng trên phần mềm mã nguồn mở được gọi là "Mạng lưu trữ kiến thức toàn diện" hoặc viết tắt là CKAN (phát âm là "Sea-Can"). Hiện tại cổng data.govt.nz đang sử dụng CKAN 2.7.x. CKAN có tài liệu chi tiết về việc sử dụng các API mà nền tảng này cung cấp. Các hướng dẫn cụ thể hơn về cách thực hiện dành cho các nhà phát triển bao gồm việc sử dụng API nâng cao, các liên kết đến các mã có thể tái sử dụng và các ví dụ cho các nhà phát triển có trên cổng data.govt.nz.

Những điều nên và không nên khi sử dụng API data.govt.nz

Bất kỳ ai cũng có thể tự do sử dụng API để truy cập dữ liệu mở được xuất bản trên Data.govt.nz. Dưới đây là tóm tắt những nội dung nên và không nên thực hiện với API trên cổng dữ liệu mở của New Zealand. Tuy nhiên, việc sử dụng API và quyền truy cập vào Data.govt.nz nào đều phải tuân theo điều khoản sử dụng đã được quy định. Người dùng cần đọc điều khoản sử dụng trước khi sử dụng trang web, bao gồm cả API.

Đối với những điều nên, API trên cổng cho phép người dùng truy cập các bộ dữ liệu có sẵn thông qua Data.govt.nz. Người dùng cần tuân thủ các điều khoản cấp phép được áp dụng cho bất kỳ tập dữ liệu nào, ví dụ như giấy phép của tổ chức Creative Commons. Về cơ bản, người dùng có thể kết hợp dữ liệu với các bộ dữ liệu khác miễn là việc cấp phép được tôn trọng. Việc thực hiện các kết nối theo thời gian thực đến các bộ dữ liệu để đảm bảo bạn có dữ liệu mới nhất cũng được phép thực hiện. Đồng thời, việc lưu tập dữ liệu vào bộ nhớ đệm để giúp thực hiện và đảm bảo quyền truy cập trong trường hợp API ngừng hoạt động cũng là điều được thực hiện. Ngoài ra, việc sử dụng API trong một số ứng dụng mà có thể chỉ người dùng đã đăng ký mới có thể tiếp cận được nên người dùng cần yêu cầu cổng Data.govt.nz để được đăng ký. Việc cung cấp một liên kết từ ứng dụng mà người dùng đã phát triển đến Data.govt.nz để thể hiện việc sử dụng dữ liệu của cổng là một điều nên làm mặc dù đây là vấn đề không bắt buộc.

Hình 1: Mô hình tiếp cận việc trao đổi dữ liệu qua API

Đối với những nội dung không được làm đối với API trên cổng, người dùng không thể sử dụng API để cố tình can thiệp hoặc làm gián đoạn API, máy chủ hoặc mạng. Người dùng cũng không sử dụng các API này để khiếu nại quyền đối với thông tin cá nhân, dữ liệu hoặc tài sản trí tuệ trong bộ dữ liệu được truy cập thông qua API. Ngoài ra, việc tuyên bố ứng dụng mà người dùng phát triển từ việc sử dụng dữ liệu từ API Data.govt.nz là sản phẩm hoặc dịch vụ chính thức của chính phủ cũng không được phép trừ khi người dùng được đồng ý chấp thuận để làm nội dung này. Đồng thời, việc sử dụng bộ dữ liệu thông qua API để thực hiện các hành vi bất hợp pháp theo luật pháp New Zealand hoặc vi phạm quyền của bất kỳ người nào khác cũng được nghiêm cấm.

Đáng chú ý là việc sử dụng API Data.govt.nz là "nguyên trạng" và "có sẵn", cổng dữ liệu mở không cung cấp bất kỳ đảm bảo nào về hoạt động hoặc tính khả dụng của API được cung cấp. Cổng dữ liệu mở Data.govt.nz cũng không cung cấp bất kỳ cam kết nào về bất kỳ tập dữ liệu nào là đầy đủ, chính xác, cập nhật hoặc đáng tin cậy hoặc việc có hoặc sử dụng tập dữ liệu sẽ không vi phạm bất kỳ ai khác quyền sở hữu trí tuệ hoặc các quyền khác. Ngoài ra, cũng cần lưu ý các phiên bản mới của API nhiều khi được cung cấp bất thường và điều này có thể yêu cầu người dùng phải cập nhật các hoạt động trên hệ thống của người dùng để sử dụng phiên bản mới nhất.

Truy cập dữ liệu đặc tả tập dữ liệu thông qua API

Các bộ dữ liệu, các cơ quan cung cấp và nhóm chủ đề trên cổng Data.govt.nz có thể được truy cập và truy vấn như JSON thông qua API dữ liệu đặc tả. Tiền tố cho các điểm cuối tài nguyên web là https://catalogue.data.govt.nz/api/action và chúng trả về phản hồi ở định dạng JSON. Người dùng có thể truy xuất tập dữ liệu và dữ liệu đặc tả của tài nguyên thông qua các hàm sau như. Với hàm /package_metadata_show?id={package id} sẽ giúp nhận dữ liệu đặc tả của tập dữ liệu và tất cả các tài nguyên dữ liệu của tập dữ liệu đó. Tất cả liên kết tải xuống của tài nguyên dữ liệu, ngày cập nhật lần cuối, v.v. có thể được truy xuất tại đây. Đối với hàm /resource_metadata_show?id={resource id} sẽ giúp nhận siêu dữ liệu của một tài nguyên dữ liệu cụ thể. Hàm này là một tập hợp con của package_metadata_show vì nó sẽ liệt kê tất cả các tài nguyên dữ liệu. Liên kết tải xuống tài nguyên dữ liệu, ngày cập nhật lần cuối, v.v. cũng có thể được truy xuất tại đây. Để hiểu rõ hơn về nội dung này, chúng ta có thể tham khảo tài liệu của CKAN.

Chúng ta có thể tìm hiểu một số ví dụ sau để hiểu rõ hơn về cách thức hoạt động. Về ví dụ việc lấy dữ liệu đặc tả của tập dữ liệu, trước hết xác định phương pháp tài nguyên web thích hợp để sử dụng thông qua package_metadata_show. Tiếp đến cần xác định tập dữ liệu người dùng muốn và truy xuất ID của tập dữ liệu này, ví dụ như new-zealand-public-sector-websites.  Tiếp đến cần tạo lệnh gọi HTTP POST đến: https://catalogue.data.govt.nz/api/action/package_metadata_show?id=new-zealand-public-sector-websites. Sau bước này, người dùng sẽ nhận được phản hồi JSON có chứa siêu dữ liệu cho tập dữ liệu này. Sau khi phân tích phản hồi JSON, hãy kiểm tra yêu cầu có thành công hay không bằng cách đảm bảo rằng giá trị response-json-object.success đánh giá là true trước khi tiếp tục. Ví dụ sau đây là ví dụ sử dụng Python để truy xuất thông tin tập dữ liệu từ trang web:

#!/usr/bin/env python

import urllib2

import urllib

import json

import pprint

 

# Use the json module to dump a dictionary to a string for posting.

data = urllib.quote(json.dumps({'id': 'new-zealand-public-sector-websites'}))

 

# Make the HTTP POST request.

response = urllib2.urlopen('https://catalogue.data.govt.nz/api/action/package_show', data)

assert response.code == 200

 

# Use the json module to load CKAN's response into a dictionary.

response_dict = json.loads(response.read())

 

# Check the contents of the response.

assert response_dict['success'] is True

result = response_dict['result']

pprint.pprint(result)

Một ví dụ khác về việc lấy dữ liệu đặc tả của tài nguyên. Tuy nhiên, cũng cần lưu ý rằng việc truy xuất dữ liệu đặc tả tập dữ liệu như ví dụ trên đã bao gồm dữ liệu đặc tả cho tất cả các tài nguyên dữ liệu của nó. Để lấy dữ liệu đặc tả cho tài nguyên, trước hết cần xác định phương pháp tài nguyên web thích hợp để sử dụng thông qua resource_show. Sau đó, tiến hành xác định tài nguyên dữ liệu bạn muốn và truy xuất ID của nó, ví dụ: 4c5f6967-6c6d-4981-aa10-6b6790918cb5. Bước tiếp theo cần tạo lệnh gọi URL:

https://catalogue.data.govt.nz/api/action/resource_show?id=4c5f6967-6c6d-4981-aa10-6b6790918cb5.

Thực hiện yêu cầu POST đến URL trên và người dùng sẽ nhận được phản hồi. Sau khi phân tích phản hồi JSON, cần kiểm tra xem yêu cầu có thành công hay không bằng cách đảm bảo rằng giá trị response-json-object.success đánh giá là true trước khi tiếp tục. 

Đối với việc truy cập dữ liệu máy có thể đọc được thông qua API, API data.govt.nz DataStore cho phép người dùng truy cập và truy vấn các hàng và cột dữ liệu thô được các cơ quan liệt kê ở định dạng CSV có thể đọc được bằng máy thông qua điểm cuối JSON API. Khi các cơ quan cung cấp tệp dữ liệu của họ ở định dạng mở và máy có thể đọc được (ví dụ: CSV), data.govt.nz có thể cung cấp dữ liệu này thông qua "API DataStore". API Datastore là một công cụ hữu ích để bạn truy vấn các hàng dữ liệu cụ thể trong tài nguyên dữ liệu. Nó cho phép người dùng truy vấn và sử dụng cùng một dữ liệu ở định dạng JSON. Mỗi hàng trong kho dữ liệu tương ứng với một Khóa chính, được xác định bởi trường _id.

Thu thập dữ liệu tự động

Data.govt.nz đã áp dụng tiêu chuẩn mở thu thập dữ liệu quốc tế (data.json) để tự động hóa việc cập nhật và bổ sung tập dữ liệu. Tệp data.json là kho dữ liệu có thể đọc được bằng máy được sử dụng để trao đổi siêu dữ liệu giữa các danh mục dữ liệu (như data.govt.nz). Nó cho phép một mô hình phân tán giữ cho danh mục tập trung được cập nhật liên tục từ nhiều hệ thống đóng góp khác nhau (đây còn được gọi là mô hình "Liên kết"). Tệp data.json tuân thủ các tiêu chuẩn mở được sử dụng rộng rãi trên toàn thế giới trong hầu hết các cổng dữ liệu mở của chính phủ. Nó có nguồn gốc từ sáng kiến Project Open Data ở Hoa Kỳ và thuộc tiêu chuẩn tương tác W3C DCAT (Data CATalog Vocabulary).

Nếu các cơ quan duy trì một hoặc nhiều tệp data.json chứa dữ liệu đặc tả của các tập dữ liệu mà các cơ quan này muốn liệt kê trên data.govt.nz thì chúng có thể được bộ phận hỗ trợ của cổng data.govt.nz (info@data.govt.nz) thiết lập để thu thập thường xuyên. Các tần suất thu thập có sẵn là hàng tháng, hàng tuần hoặc hàng ngày. Tệp data.json phải tồn tại dưới dạng URL có thể truy cập công khai và URL này sẽ không thay đổi. Tuy nhiên, cơ quan này có thể cập nhật tệp bao gồm các bộ dữ liệu mới, đã bị xóa hoặc cập nhật sẽ được xuất hiện trên cổng data.govt.nz vào các lần thu thập tiếp theo.

Để tạo tệp thu thập data.json có thể tiến hành qua một cách thức. Phương án đầu tiên là thông qua tệp CSV. Đây là một phương pháp đơn giản để tạo tệp thu thập data.json bằng việc sử dụng mẫu CSV được cung cấp và cung cấp dữ liệu đặc tả đối với tập dữ liệu của cơ quan cung cấp. Khi cung cấp thông tin vào kho CSV, tên của các cột trong CSV hầu hết giống như trong lược đồ data.json. Để làm cho việc điền vào kho lưu trữ thông tin dễ dàng hơn, một số cột CSV có thể được nhập bằng ngôn ngữ đơn giản, thay vì các tiêu chuẩn có tính kỹ thuật. Công cụ chuyển đổi sử dụng ký hiệu dấu chấm (.) để lưu trữ các giá trị lồng nhau khi chúng xuất hiện trong tệp data.json. Chẳng hạn như "publisher": {"name": ""} trong tệp json sẽ được lưu trữ trong cột tệp CSV với tiêu đề publisher.name.

Định dạng CSV có thể xử lý các tập dữ liệu có một hoặc nhiều tệp dữ liệu hoặc URL liên quan. Chúng được nhập vào cùng một hàng trong tệp CSV như dữ liệu đặc tả của tập dữ liệu. Đối với mỗi tệp riêng lẻ hoặc API, người cung cấp sẽ thêm một loạt các cột bằng cách sử dụng ký hiệu chấm được đề cập ở trên. Cơ quan cung cấp dữ liệu có thể chạy tệp CSV thông qua công cụ chuyển đổi protoype trực tuyến của cổng dữ liệu mở hoặc sử dụng công cụ nodejs mã nguồn mở để chuyển đổi. Cách thức thứ 2 là triển khai chuẩn data.json trong hệ thống của riêng cơ quan, miễn là tiêu chuẩn mở được tuân thủ.

Các định dạng của dữ liệu mở

Ngoài việc cung cấp dữ liệu mở dưới dạng API, để tối đa hóa việc tái sử dụng và giá trị của dữ liệu mở mang lại, cần đảm bảo rằng việc phát hành dữ liệu ở định dạng máy và con người có thể đọc được, chẳng hạn như PDF, CSV và XLS. Điều này cũng đảm bảo rằng cơ quan cung cấp tuân thủ quy định liên quan đến giấy phép và truy cập mở của Chính phủ New Zealand (NZGOAL), theo yêu cầu về công khai và minh bạch được Chính phủ New Zealand công bố năm 2011.

Định dạng của tập dữ liệu đề cập đến cách tệp được thể hiện trên đĩa máy tính. Định dạng thường tương ứng với phần cuối của tên tệp ("phần mở rộng"), ví dụ: tệp ở định dạng CSV có thể được gọi là "danh sách trường học.csv". Liên quan đến dữ liệu mở, định dạng bên trong của tập dữ liệu xác định máy tính có thể xử lý như thế nào với dữ liệu và và liệu dữ liệu có thể đọc được bằng máy hay không. Giao diện của tệp khi được mở bởi phần mềm máy tính thích hợp sẽ xác định xem định dạng có thể đọc được của con người hay không.

Với định dạng con người có thể đọc được (human readable) đề cập đến các định dạng con người có thể đọc và được đọc một cách thuận tiện bởi con người. Chúng thường chứa thêm định dạng, màu sắc và phong cách riêng giúp mọi người có thể đọc thông tin. Ví dụ bao gồm các tệp PDF được xuất bản để mọi người đọc và hiểu một số dữ liệu. Ví dụ như thông tin trong các tập định dạng pdf thì con người có thể dễ dàng đọc và hiểu dữ liệu. Tuy nhiên, máy không thể tự động đọc hoặc xử lý dữ liệu này vì PDF không phải là dữ liệu có cấu trúc. Nếu một người dùng muốn sử dụng dữ liệu này trong phân tích hoặc cho một ứng dụng máy tính, trước tiên họ phải sao chép thủ công dữ liệu sang định dạng có thể đọc được bằng máy, đây là một điều bất cập vì người dùng phải mất nhiều thời gian hơn. 

Các định dạng máy có thể đọc được (machine readable) thể hiện dữ liệu ở định dạng máy có thể đọc được có thể được máy tính tự động đọc và xử lý. Ví dụ như CSV, JSON, XML, v.v. Dữ liệu có thể đọc được bằng máy phải là dữ liệu có cấu trúc. Định dạng máy có thể đọc được một cách phù hợp có thể thay đổi theo loại dữ liệu. Ví dụ như định dạng máy có thể đọc được cho dữ liệu địa lý có thể khác với định dạng cho dữ liệu dạng bảng. Hơn nữa, các định dạng có thể khác nhau về mức độ đọc của con người khi được mở trong các ứng dụng máy tính khác nhau.

Kết luận

Để mở dữ liệu thuận tiện cho người dùng tái sử dụng và khai phá được giá trị, dữ liệu mở ở những định dạng thuận tiện cho máy đọc và đảm bảo tính cập nhật dưới dạng API là điều cần thiết. Bài viết này cung cấp những thông tin cơ bản liên quan đến việc sử dụng API trên một số cổng dữ liệu mở mà cụ thể là New Zealand để người đọc có thể hình dung được những mục đích cũng như cách tiến hành khi cung cấp dưới định dạng này. Việc nghiên cứu và ban hành các quy định, hướng dẫn cung cấp dữ liệu mở bằng việc sử dụng API là việc làm cần thiết để nâng cao tính khả dụng, kịp thời và chất lượng nhằm khai phá giá trị dữ liệu tốt hơn./.

Nguyễn Huy Kháng

Tài liệu tham khảo

  • [Online] // World Bank Open Data. - 2022. - https://data.worldbank.org/.
  • Open Data Handbook [Online]. - 2022. - http://opendatahandbook.org/.
  • Open Data Policy Hub [Online]. - 2022. - https://sunlightfoundation.com/.
  • Open Standards for Data [Online]. - 2022. - https://standards.theodi.org/.
  • Readiness Assessment Tool [Online]. - 2022. - http://opendatatoolkit.worldbank.org/en/odra.html.
  • Releasing data on data.govt.nz [Online]. - 2022. - https://www.data.govt.nz/catalogue-guide/releasing-data-on-data-govt-nz/.
  • The Impact of Open Data – Initial Findings from Case Studies [Online]. - 2022. - https://blog.thegovlab.org/post/the-impact-of-open-data-initial-findings-from-case-studies.
  • Using data.govt.nz APIs [Online]. - 2022. - https://www.data.govt.nz/catalogue-guide/using-data-govt-nz-apis/.