Phần 4. Thử nghiệm và đánh giá
1. Các chức năng chính
Cụ thể hơn, website sẽ có 3 chức năng chính sau:
- Liệt kê và sử dụng trực tiếp các API đơn của các service từ các nhà cung cấp khác nhau. Hiện tại, tôi mới trình diễn API từ Google và một số từ Facebook do phải viết lại thủ công mô tả của API. Hy vọng sau này các nhà cung cấp đưa ra API theo một chuẩn thống nhất.
- Giao diện đồ họa để người dùng có thể xây dựng mashup của họ.
- Giao diện để người dùng sử dụng mashup mà họ tạo ra hoặc được cung cấp sẵn.
Liệt kê các API
Chức năng này được xây dựng tương tự như ứng dụng Google OAuth 2.0 Playground, mục đích là để người dùng xem xét cách sử dụng một API như thế nào.
Hình 31: Giải nghĩa chức năng liệt kê API
61
Hình 32: Liệt kê Service, API và gọi API trong chương trình
Các bước sử dụng cơ bản vẫn như trên, chỉ có một vài thay đổi nhỏ để tinh chỉnh, giúp người dùng sử dụng dễ dàng hơn (ứng dụng trên của Google không hiển thị thông tin về API, ví dụ như header, request, vv…).
Đối với các Web API của các nhà cung cấp khác, do họ chưa có chuẩn để mô tả các Web API của họ, nên tôi phải tự viết mô tả thủ công, ví dụ với Facebook, api liệt kê các feed của user được định nghĩa theo chuẩn của Google như sau:
{
"name": "facebook.user.feed.list", "description": "List user's feeds", "scopes": [
"read_stream", "user_posts"
],
"request": {
"http_method": "GET",
"request_path": "https://graph.facebook.com/v2.2/me/feed", "parameters": [],
"fields": [{
"name": "with",
"description": "Restrict the list of posts to only those with location attached.",
"type": "enum{'location'}"
}, {
"name": "filter",
"description": "Retrieve only posts that match a particular stream filter. Valid filters are: \nnf - News Feed\napp_2915120374 - Status
62
Updates\napp_2305272732 - Photos\napp_2309869772 - Links\npp - Pages\napp_2392950137 - Video\napp_2347471856 - Notes\napp_2361831622 - Groups", "type": "string"
} ] },
"response": {
"method_result_errors": [ {
"error_code": "404", "description": "Not found"
} ],
"method_result_success": { "result_fields": [ {
"name": "data",
"description": "List of feeds", "type": "array",
"items": {
"type": "feed",
"description": "Feed object"
} }, {
"name": "paging",
"description": "Position", "type": "object",
"properties": { "previous": {
"type": "string",
"description": "Previous page url"
},
"next": {
"type": "string",
"description": "Next page url"
} } } ] } } }
Ngoài ra, tôi còn cung cấp một vài API cơ bản để có thể tạo được cấu trúc logic như các phép toán logic, điều kiện so sánh, …
Tạo mashup
Mashup được tạo ra bằng giao diện kéo thả, khi cần sử dụng API nào, ta kéo API từ danh sách các API đó vào đồ thị tổng hợp, mỗi API tương ứng với một đỉnh trên đồ thị, các property của API là các đầu vào hoặc đầu ra. Đầu ra của API này được kéo thả gắn với đầu vào của API khác, trên đồ thị sẽ xuất hiện một liên kết từ API này đến API khác nếu như , tương ứng với một cạnh của đồ thị có hướng.
Ví dụ một API được biểu diễn bằng một node trên đồ thị như sau:
63
Hình 33: Ví dụ một node
Ví dụ một đồ thị được đơn giản hóa, mô tả nghiệp vụ: update tên trẻn Facebook giống với tên sử dụng trên Google.
Hình 34: Ví dụ tương tác để tạo ra Service mới
Đồ thị này sau đó được lưu trữ bằng cách sử dụng JGF, cả về nghiệp vụ lẫn thông tin hiển thị được lưu lại và khi cần có thể được hiển thị giống hệt như khi được tạo ra.
Khi ấn phím Save, chương trình sẽ tạo ra một Web Service, yêu cầu người dùng đưa vào phần mô tả cho Web Service này, bao gồm: Tên Web Service, mô tả về Web Service, các đầu vào yêu cầu (được lấy ra từ các API thành phần sau khi đã loại bỏ các đầu vào yêu cầu mà được cung cấp bởi API trong chính nó), đầu ra yêu cầu (khi thực thi, các API này sinh ra rất nhiều thông tin, người dùng chỉ quan tâm
64
đến một vài thông tin trong đó). Sau đó, Web Service này được mô tả theo chuẩn của Google.
Sử dụng mashup
Về mặt xử lý, do Web Service được mô tả bằng đồ thị, vì vậy cách thức thực thi tôi đưa ra là: Sử dụng topology sort để sắp xếp thứ tự các API cần gọi (do thông tin lan truyền dần qua các API), sau đó gọi lần lượt các API, qua mỗi API lưu lại kết quả, trạng thái để có thể làm đầu vào của các API khác khi cần. Thông tin đầu vào và thông tin đầu ra theo chuẩn quy ước của Google.
Việc sử dụng mashup cũng tương tự như việc sử dụng một API độc lập như ở trên, chỉ khác là cần đưa vào token của tất cả các Service thành phần để có thể thực thi được.
Do trong thời gian viết luận văn, các Web API của Facebook và Google đã bị thay đổi gây nên chương trình không thể thực thi được, tôi sẽ cập nhật lại trong thời gian sớm để có thể được sử dụng và đánh giá khách quan hơn.