MERAKI
Cisco Meraki là một giải pháp mạng đầy đủ, sử dụng cloud.
Meraki trở thành một phần của Cisco sau khi Cisco mua lại vào năm 2012. Danh mục sản phẩm của Meraki khá lớn, bao gồm các sản phẩm giám sát mạng không dây, các sản phẩm chuyển mạch switching, các sản phẩm bảo mật và video. Yếu tố khác biệt của Meraki so với các sản phẩm tương tự của Cisco và các nhà cung cấp khác là sản phẩm Meraki được quản lý dựa trên đám mây. Nếu nhìn từ góc độ lập trình, nền tảng cloud của Meraki cung cấp vài loại API: Captive Portal API, Scanning API, MV Sense Camera API, Dashboard API.
Nền tảng đám mây Meraki cũng cung cấp cơ chế webhook, trong đó các ứng dụng có thể đăng ký để nhận các cảnh báo được gửi từ Meraki khi một sự kiện xảy ra. Một cảnh báo Meraki được định dạng JSON có thể được cấu hình để gửi đến một URL duy nhất, nơi đó nó sẽ được xử lý, lưu trữ và thực thi các hành động tiếp theo để kích hoạt quy trình làm việc tự động hóa.
API Captive Portal mở rộng sức mạnh của chức năng trang Meraki tích hợp bằng cách cung cấp đầy đủ quyền kiểm soát nội dung và tiến trình xác thực mà người dùng tương tác khi kết nối với mạng không dây Meraki. Điều này có nghĩa là quản trị viên mạng hoàn toàn có thể tùy chỉnh trang cổng thông tin portal, bao gồm trải nghiệm cho khách hàng khi kết nối với mạng, giao diện của trang web và các quy trình xác thực và thanh toán.
Scanning API tận dụng các thiết bị thông minh Meraki được trang bị chức năng không dây và BLE (Bluetooth Low Energy) để cung cấp các phân tích vị trí và báo cáo về hành vi của người dùng. Điều này có thể đặc biệt hữu ích trong các môi trường bán lẻ, chăm sóc sức khỏe và doanh nghiệp. Các thông tin về người dùng và thông tin kinh doanh có thể được trích xuất để biết về xu hướng và sự tham gia và hành vi của người dùng. API loại này cung cấp dữ liệu trong thời gian thực và có thể được sử dụng để phát hiện các thiết bị Wi-Fi và BLE. Dữ liệu dưới định dạng JSON được xuất tới một máy chủ được chỉ định thông qua HTTP POST. Tại đây, dữ liệu này có thể được xử lý thêm và các ứng dụng có thể được xây dựng trên dữ liệu nhận được. Meraki có thể ước tính vị trí của các máy khách được kết nối với mạng.
Loại API MV Sense Camera tận dụng bộ xử lý tích hợp mạnh mẽ và kiến trúc duy nhất để chạy khối lượng công việc của lĩnh vực học máy ở lớp mạng biên. Thông qua MV Sense API của Meraki, các ứng dụng phần mềm có thể tích hợp các chức năng phát hiện, phân loại và theo dõi đối tượng được hiển thị. Ví dụ: bạn có thể trích xuất thông tin chi tiết về doanh nghiệp từ nguồn cấp dữ liệu video. Các loại API liên quan đến đầu cuối đều được cung cấp thông qua hai giao thức là REST API và MQTT. MQ Telemetry Transport (MQTT) là một giao thức truyền tải tin nhắn xuất bản / đăng ký máy khách / máy chủ. Nó nhẹ, đơn giản, mang tính mở và dễ thực hiện. MQTT lý tưởng để sử dụng trong các môi trường hạn chế như IoT và giao tiếp giữa máy với máy vì lưu lượng sửa dụng là rất nhỏ.
Các loại API Meraki được đề cập cho đến lúc này chủ yếu được sử dụng để trích xuất dữ liệu từ nền tảng đám mây và xây dựng các phần mềm để tích hợp và ứng dụng với dữ liệu đó. API Dashboard, được đề cập tiếp theo, cung cấp các điểm cuối và tài nguyên để cấu hình, quản lý và giám sát tự động nền tảng đám mây Meraki. Dashboard API được thiết kế để có tính mở và có thể được sử dụng cho nhiều mục đích, nhiều trường hợp. Loại Dashboard API là một loại API mới, hiện đại dùng RESTful API và các hàm gọi HTTPS đến một địa chỉ URL và JSON như là một định dạng mà con người có thể đọc được. Dashboard API là một công cụ mở có thể được dùng cho nhiều mục đích.
Một vài chức năng phổ biến của Dashboard API là
Để có quyền truy cập vào dashboard API, trước tiên bạn cần bật API đó. Bắt đầu bằng cách đăng nhập vào https://dashboard.meraki.com, sau đó dẫn hướng đến Organization > Settings. Từ đó, cuộn xuống và định vị phần có tên Truy cập Dashboard API và đảm bảo bạn chọn Bật truy cập và lưu các thay đổi cấu hình ở cuối trang. Khi bạn đã bật API, hãy chọn tên người dùng của bạn ở góc trên cùng bên phải của trang web và chọn My Profile. Trong hồ sơ của bạn, hãy cuộn xuống và định vị phần có tên Truy cập Dashboard API và chọn Tạo khóa API mới. Khóa API bạn tạo được liên kết với tài khoản của bạn. Bạn có thể tạo, thu hồi và tạo lại khóa API trong hồ sơ của mình. Hãy đảm bảo bạn sao chép và lưu trữ khóa API của mình ở nơi an toàn, vì bất kỳ ai có khóa này đều có thể mạo danh bạn và có quyền truy cập thông qua API Bảng điều khiển cho tất cả thông tin mà tài khoản của bạn có quyền truy cập. Vì lý do bảo mật, khóa API không được lưu trữ ở dạng văn bản thuần túy trong hồ sơ của bạn, vì vậy nếu bạn mất khóa, bạn sẽ phải thu hồi khóa cũ và tạo khóa mới. Nếu tin rằng khóa API của mình đã bị xâm phạm, bạn có thể tạo khóa API mới để tự động thu hồi khóa API hiện có.
Mỗi yêu cầu API Dashboard phải chỉ định khóa API trong tiêu đề yêu cầu. Nếu khóa API bị thiếu hoặc không chính xác được chỉ định, API trả về thông báo lỗi HTTP 404. Lỗi HTTP 404 có nghĩa là tài nguyên API bạn đang cố gắng tiếp cận không thể tìm thấy trên máy chủ. Mã lỗi này ngăn chặn rò rỉ thông tin và trái phép khám phá tài nguyên API. Khóa cho tiêu đề yêu cầu xác thực là X-Cisco- Meraki-API-Key và giá trị là khóa API bạn thu được trước đó. Tóm lại, để gọi Meraki Dashboard API, chúng ta cần có API key. Tiếp theo, chúng ta sẽ khảo sát vấn đề bảo mật API của Meraki.
Để giảm thiểu các cuộc tấn công lạm dụng và tấn công từ chối dịch vụ, Dashboard API của Meraki được giới hạn ở 5 lệnh gọi API mỗi giây cho mỗi tổ chức. Riêng trong giây đầu tiên, chúng ta được phép gọi thêm 5 cuộc gọi API. Trong hai giây đầu tiên, số cuộc gọi API tối đa được phép là 15. Nếu vượt quá giới hạn tỷ lệ, thông báo lỗi với mã trạng thái HTTP 429 sẽ được trả về. Kỹ thuật khống chế tốc độ mà Dashboard API sử dụng dựa trên mô hình token-bucket. Token-bucket là một thuật toán được dùng để kiểm tra là dữ liệu được truyền trong một khoảng thời gian nào đó là tương thích với mức băng thông và phần bùng nổ cho phép. Dựa trên mô hình này, nếu số lượng yêu cầu API vượt qua ngưỡng đã thiết lập trong một khoảng thời gian nhất định, bạn phải đợi một khoảng thời gian cho đến khi bạn có thể thực hiện một yêu cầu API mới. Thời gian bạn phải chờ phụ thuộc vào số lượng yêu cầu bạn đã thực hiện vượt quá giới hạn cho phép; bạn càng thực hiện nhiều yêu cầu, bạn càng phải chờ nhiều thời gian.
Dashboard API sử dụng URL https://api.meraki.com/api/v0. Hãy nhớ rằng khi nói về API, hiện tại và tương lai sẽ có xuất hiện nhiều phiên bản mới. Hãy luôn kiểm tra các tài liệu API liên quan để có các thông tin mới nhất. Để giúp người dùng sử dụng dễ dàng các sản phẩm Meraki, Dashboard API cũng được sắp xếp để bắt chước cấu trúc của Meraki dashboard. Khi bạn đã trở nên quen thuộc với giao diện GUI hoặc API, bạn có thể dễ dàng chuyển đổi qua lại giữa chúng. Cấu trúc của Dashboard API có dạng như sau:
Phần lớn các API call sẽ cần thông số organization ID hay là network ID như là một thành phần của đầu cuối. Khi bạn có các ID này, bạn có thể xây dựng và thực hiện các cuộc gọi nâng cao khác để thu thập dữ liệu, tạo mới và cập nhật tài nguyên, cấu hình và thực hiện các thay đổi đến hạ tầng mạng. Bạn cũng nên nhớ là để gọi API thì cần API key. Nếu Meraki dashboard chứa một số lượng lớn các tổ chức, các mạng hoặc các thiết bị, bạn có thể cân nhắc việc sử dụng cơ chế phân trang pagination khi gọi API. Đây là cơ chế được dùng khi lượng dữ liệu trả về từ một cuộc gọi API là quá lớn và cần phải giới hạn đến một tập hợp con.
Dashboard API hỗ trợ ba loại thông số truy vấn cho phân trang:
Mỗi trang (perPage): Số lượng các thành phần cần trả về trong cuộc gọi API hiện hành.
Bắt đầu sau một giá trị nào đó (startingAfter): Một giá trị được dùng để chỉ ra là các dữ liệu trả về sẽ bắt đầu ngay sau giá trị này.
Kết thúc trước khi (endingBefore): Một giá trị được dùng để chỉ ra các dữ liệu trả về sẽ kết thúc ngay trước giá trị này.
Hai kiểu thông số startingAfter và endingBefore khác nhau về ảnh hưởng lên đầu cuối API, các thông số này thuộc được gán các nhãn thời gian trong đó chỉ ra các khoảng thời gian mà dữ liệu sẽ được trả về hay các giá trị số nguyên chỉ ra ID hoặc một dãy các ID.
Dashboard API cũng hỗ trợ các hành động theo lô, giúp chúng ta có thể chạy nhiều tác vụ cùng lúc trong một phiên. Tính năng này lý tưởng cho việc cấu hình khởi tạo ban đầu cho một số lượng lớn thiết bị hoặc thực hiện một thay đổi cấu hình lớn trên toàn mạng. Các hành động theo lô cũng cung cấp cơ chế để tránh các kỹ thuật hạn chế tốc độ thực thi trong các tác vụ thay đổi cấu hình theo diện rộng vì bạn chỉ hiện thực tất cả các thay đổi trong một hoặc vài phiên thay vì phải dùng một số lượng lớn các cuộc gọi API.
Các phiên chạy theo dạng lô có thể hoạt động theo kiểu đồng bộ, nghĩa là chờ cho API trả kết quả về trước khi tiếp tục hoặc bất đồng bộ, nghĩa là chương trình không cần chờ API trả kết quả về khi một cuộc gọi được đưa vào hàng đợi để chờ xử lý.
Với các tác vụ chạy theo dạng lô, bạn có thể tự tin rằng tất cả các cập nhật chứa trong các phiên này được xác nhận là thành công bởi vì các lệnh dạng lô là chạy theo chế độ nguyên tử: được tất cả hay mất tất cả. Sau khi bạn đã bật Meraki Dashboard API, đã tạo ra API key và lưu nó trong một nơi an toàn, bạn có thể bắt đầu tương tác với API. Để có thể thực hành Meraki, các bạn có thể tận dụng các lab trực tuyến miễn phí của Cisco ở địa chỉ https://developer.cisco.com/sandbox. Khóa API key cho sandbox này là 15da0c6ffff295f16267f88f98694cf29a86ed87.
Lúc này, bạn cần phải lấy thông tin về organization ID cho tài khoản này. Chúng ta sẽ dùng curl và Postman để lấy thông tin organization ID cho DEVNET sandbox và Meraki Python SDK. Địa chỉ URL cho API Dashboard là https://api.meraki.com/api/v0. Để lấy tên tổ chức cho tài khoản với khóa API key, bạn sẽ thêm vào phần tài nguyên cần truy cập /organizations. Kết quả sau cùng sẽ là https://api.meraki.com/api/v0/organizations.
Bạn cũng cần bao gồm phần header X-Cisco-Meraki-API-Key cho mục đích xác thực. Phần header này chứa khóa API key cho tài khoản DEVNET Sandbox. Lệnh curl trong trường hợp này sẽ có dạng như sau:
curl -I -X GET \
--url 'https://api.meraki.com/api/v0/organizations' \
-H 'X-Cisco-Meraki-API-Key:15da0c6ffff295f16267f88f98694cf29a86ed87'
Kết quả trả về sẽ có dạng:
HTTP/1.1 302 Found
Server: nginx
Date: Sat, 17 Aug 2019 19:05:25 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Cache-Control: no-cache, no-store, max-age=0,
must-revalidate
Pragma: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
X-Frame-Options: sameorigin
X-Robots-Tag: none
Location:
https://n149.meraki.com/api/v0/organizations
X-UA-Compatible: IE=Edge,chrome=1
X-Request-Id: 87654dbd16ae23fbc7e3282a439b211c
X-Runtime: 0.320067
Strict-Transport-Security: max-age=15552000;
includeSubDomains
Trong kết quả, mã trả về của cuộc gọi API có giá trị là 302. Kết quả này chỉ ra là cuộc gọi API bị điều hướng redirext đến một URL có giá trị chỉ ra trong Location header. Các điều hướng như tên có thể xảy ra với bất kỳ cuộc gọi API nào bên trong API Dashboard, bao gồm các POST, PUT và DELETE. Đối với các cuộc gọi hàm GET, điều hướng được chỉ thông qua mã trạng thái 302. Đối với các cuộc gọi non-GET, kết quả trả về có mã từ 307 hay 308.
Khi chúng ta dùng tùy chọn –I trong curl, chỉ có phần header của kết quả là hiển thị cho người dùng. Đến lúc này, chúng ta sẽ cần chạy lệnh curl một lần nữa. Lần này chúng ta sẽ dùng tài nguyên là
https://n149.meraki.com/api/v0/organizations, không sử dụng tùy chọn –I, thêm vào một Accept header để chỉ ra kết quả trả về của cuộc gọi phải ở định dạng JSON. Lệnh lúc này sẽ có dạng:
curl -X GET \
--url 'https://n149.meraki.com/api/v0/organizations' \
-H 'X-Cisco-Meraki-API-Key:
15da0c6ffff295f16267f88f98694cf29a86ed87'\
-H 'Accept: application/json'
Kết quả lúc này sẽ chứa organization ID trong định dạng JSON.
[
{
"name":"DevNet Sandbox",
"id":"549236"
}
]
Bây giờ chúng ta hãy thử khảo sát cách thức chúng ta dùng Postman để lấy thông tin organization-ID. Postman là một công cụ phổ biến được dùng để khảo sát API và tạo ra các yêu cầu truy vấn. Postman có các tính năng hỗ trợ được xây dựng bên trong cho các cơ chế xác thực khác nhau, tạo ra các header, các thông số, các tổng hợp các truy vấn và các môi trường. Mặc định Postman có tùy chọn Automatically Follow Redirects được bật trong phần Settings, vì vậy bạn không cần phải thay đổi địa chỉ https://api.meraki.com/api/v0/organizations vì nó đã được Postman thực hiện ngầm ở bên dưới. Nếu bạn tắt tính năng Automatically Follow Redirects này, bạn sẽ thấy kết quả của Postman chính xác giống như trong curl.
Hình bên dưới mô tả Postman tương tác với tất cả các trường sao cho Meraki REST API sẽ trả về tên tổ chức mà tài khoản này có thể truy cập.
Trong kết quả trên, bạn thấy kết quả hiển thị ở dạng JSON giống như trước, với cùng tên tổ chức organization ID của tài khoản DEVNET sandbox.
Chúng ta hãy tiếp tục khảo sát Dashboad APU và tìm thêm thông tin về các mạng kết hợp với tên của tổ chức organization. Nếu chúng ta tìm kiếm thông tin về API ở địa chỉ https://developer.cisco.com/meraki/a...ation-networks,
Bạn sẽ thấy rằng để tìm ra các mạng thuộc về một tổ chức cụ thể, bạn cần thực hiện hàm gọi GET đến địa chỉ https://api.meraki.com/api/v0/organizations/{organizationId}/networks, trong đó {organizationId} là ID mà bạn có được trước đó. Bạn cũng khám phá ra rằng địa chỉ URL của sandbox là https://n149.meraki.com/api/v0. Bạn có thể bổ sung địa chỉ API với thông tin này bằng lệnh curl sau:
curl -X GET \
--url 'https://n149.meraki.com/api/v0/organizations/549236/
networks' \
-H 'X-Cisco-Meraki-API-Key: 15da0c6ffff295f16267f88f98694c
f29a86ed87'\
-H 'Accept: application/json'
Kết quả trả về từ API sẽ chứa một danh sách của tất cả các mạng thuộc về tổ chức. Kết quả có dạng giống như bên dưới:
[
{
"timeZone" : "America/Los_Angeles",
"tags" : " Sandbox ",
"organizationId" : "549236",
"name" : "DevNet Always On Read Only",
"type" : "combined",
"disableMyMerakiCom" : false,
"disableRemoteStatusPage":true,
"id":"L_646829496481099586"
},
{
"organizationId":"549236",
"tags":null,
"timeZone":"America/Los_Angeles",
"id":"N_646829496481152899",
"disableRemoteStatusPage":true,
"name":"test - mx65",
"disableMyMerakiCom" : false,
"type":"appliance"
},
Kết quả trả về của ví dụ bên dưới hiển thị một danh sách của tất cả các mạng thuộc về organization ID 549236. Đối với từng mạng, kết quả chứa cùng một thông tin mà chúng ta thấy trong Meraki Dashboard. Bước kế tiếp, chúng ta sẽ sử dụng kết quả network-ID đầu tiên để tìm hiểu về Meraki Dashboard API.
Bây giờ chúng ta có thể lấy cùng một thông tin – danh sách của tất cả các mạng là một phần của organization-ID bằng cách dùng Postman. Như bạn đã thấy, mặc định Postman thực hiện chế độ điều hướng một cách tự động. Vì vậy bạn có thể chỉ ra API đầu cuối ở địa chỉ https://api.meraki.com/api/v0/organi...49236/networks.
Bạn cần đảm bảo là dùng phương thức GET, có bao gồm luôn X-Cisco-Meraki-API-Key header cho vấn đề xác thực và Accept header, trong đó bạn chỉ ra là sẽ chấp nhận kết quả trả về ở định dạng JSON. Hình bên dưới mô tả Postman thu thập hết danh sách tất cả các networks thuộc về tổ chức có ID là ID 549236.
Phần thân của thông điệp trả về sẽ chứa chính xác cùng một thông tin như trước: một danh sách đầy đủ của các mạng là một phần của DEVNET sandbox. Kế tiếp, bạn có thể thu thập danh sách của tất cả các thiết bị của một mạng có tên là “DevNet Always On Read Only” và có ID là ID L_646829496481099586. Cũng giống trong các bước trước, bạn bắt đầu bằng cách kiểm tra tài liệu API để tìm ra địa chỉ API giúp trả về kết quả cho bạn.
Tài nguyên API chứa các thông tin bạn tìm kiếm là /networks/{networkId}/devices, như bạn có thể thấy từ địa chỉ https://developer.cisco.com/meraki/a...etwork-devices.
Bạn thêm vào phần URL cho địa chỉ https://n149.meraki.com/api/v0, sau đó cập nhật thêm biến
{networkId} với giá trị bạn thu thập được trong bước kế tiếp. Kết hợp tất cả cá thông tin này, địa chỉ trả về kết quả bạn đang tìm kiếm là https://n149.meraki.com/api/v0/networks/L_6468294
96481099586/devices. Lệnh curl được dùng trong trường hợp này là
curl -X GET \
--url
'https://n149.meraki.com/api/v0/networks/L_646829496481099586/
devices' \
-H 'X-Cisco-Meraki-API-Key:
15da0c6ffff295f16267f88f98694cf29a86ed87'\
-H 'Accept: application/json'
Kết quả trả về phải có dạng tương tự như bên dưới:
[
{
"wan2Ip" : null,
"networkId" : "L_646829496481099586",
"lanIp" : "10.10.10.106",
"serial" : "QYYY-WWWW-ZZZZ",
"tags" : " recently-added ",
"lat" : 37.7703718,
"lng" : -122.3871248,
"model" : "MX65",
"mac" : "e0:55:3d:17:d4:23",
"wan1Ip" : "10.10.10.106",
"address" : "500 Terry Francois, San
Francisco"
},
{
"switchProfileId" : null,
"address" : "",
"lng" : -122.098531723022,
"model" : "MS220-8P",
"mac" : "88:15:44:df:f3:af",
"tags" : " recently-added ",
"serial" : "QAAA-BBBB-CCCC",
"networkId" : "L_646829496481099586",
"lanIp" : "192.168.128.2",
"lat" : 37.4180951010362
}
]
Lưu ý từ kết quả là mạng “DevNet Always On Read Only” có hai thiết bị: thiết bị bảo mật MX65 và một cổng MS-220 có tám cổng. Kết quả cũng bao gồm các thông tin về vị trí địa lý lắp đặt thiệt bị, địa chỉ MAD, số serial number, tags, các model number và các thông tin khác. Cùng một thông tin có trong Meraki Dashboard. Theo tiếp tiến trình này, bạn có thể thu thập được cùng một thông tin, nhưng lần này là dùng Postman. Vì quá trình điều hướng diễn ra tự động, địa chỉ API là https://api.meraki.com/api/v0/networ...099586/devices.
Bạn thêm vào hai header Accept và X-Cisco-Meraki-API-Key với các giá trị tương ứng, chọn phương thức GET và nhấn nút Send. Nếu mọi thứ là suông sẻ, kết quả trả về là 200 OK và phần thân của thông điệp sẽ chứa cùng một thông tin được sử dụng với curl. Hình bên dưới mô tả cách Postman tương tác với tất cả các header và các trường cần thiết để lấy danh sách của tất cả các thiết bị của network có ID là L_646829496481099586.
Như vậy cho đến giờ, bạn đã khảo sát Meraki Dashboard API dùng curl và Postman. Đầu tiên bạn tìm cách thu thập thông số organization ID của tài khoản Sandbox Meraki. Sau đó, dựa trên ID đó, bạn tìm tất cả các mạng liên quan. Tiếp theo, dùng một trong những network ID để tìm ra tất cả những thiết bị có trong network đó. Đây là một phần trong những khả năng của Meraki API Dashboard.
Trong phần cuối của mục này, chúng ta hãy cùng nhau tìm hiểu về Meraki Python SDK. Có hai SDK cho Meraki: một phiên bản dùng Python và một phiên bản dùng Node.js. Bản SDK dùng Python 3, được hiện thực bao gồm đầy đủ các lớp, các phương thức và các hàm để đơn giản hóa cách thức người dùng tương tác với Dashboard bằng Python. Để truy cập SDK, bạn cần cài đặt meraki-sdk mô-đun.
Một trong những kinh nghiệm thực tế là hãy luôn dùng các môi trường ảo với tất cả các dự án Python. Khi một môi trường ảo được kích hoạt, bạn có thể chạy lệnh pip install meraki-sdk để tải về phiên bản mới nhất của SDK. Trong phần này, bạn sẽ theo cùng ba bước đã thực hiện: thu thập thông tin organization ID của DEVNET sandbox, lấy một danh sách của tất cả các mạng là một phần của tổ chức này, sau đó là thu thập tất cả các thiết bị thuộc về mạng “DevNet Always on Read Only”.
Đoạn mã Python để hoàn thành ba tác vụ này được trình bày bên dưới. Bạn cần import lớp MerakiSdkClient từ mô-đun meraki_sdk. Bạn dùng lớp MerakiSdkClient để tạo ra API client bằng cách truyền một khóa API như là một thông số và tạo ra một phiên bản có tên là MERAKI.
#! /usr/bin/env python
from meraki_sdk.meraki_sdk_client import MerakiSdkClient
#Cisco DevNet Sandbox Meraki API key
X_CISCO_MERAKI_API_KEY ='15da0c6ffff295f16267f88f98694cf29a86ed87'
#Establish a new client connection to the Meraki REST API
MERAKI =MerakiSdkClient(X_CISCO_MERAKI_API_KEY)
#Get a list of all the organizations for the Cisco DevNet account
ORGS = MERAKI.organizations.get_organizations()
for ORG in ORGS:
print("Org ID: {} and Org Name:{}".format(ORG['id'], ORG['name']))
PARAMS = {}
PARAMS["organization_id"] = "549236" # Demo Organization "DevNet Sandbox"
#Get a list of all the networks for the Cisco DevNet organization
NETS =MERAKI.networks.get_organization_networks(PARAM S)
for NET in NETS:
print("Network ID: {0:20s}, Name:{1:45s},Tags: {2:<10s}".format(\
NET['id'], NET['name'],str(NET['tags'])))
#Get a list of all the devices that are part of the Always On Network
DEVICES = MERAKI.devices.get_network_devices("L_646829496481 099586")
for DEVICE in DEVICES:
print("Device Model: {0:9s},Serial:{1:14s},MAC: {2:17}, Firmware:{3:12s}"\
.format(DEVICE['model'],
DEVICE['serial'], DEVICE['mac'], \
DEVICE['firmware']))
Sau khi bạn đã khởi tạo một phiên bản cho lớp MerakiSdkClient, bạn sẽ nhận được một API client cung cấp truy cập đến tất cả các phương thức của lớp. Bạn có thể tìm thấy tài liệu cho Python SDL này ở địa chỉ https://developer.cisco.com/meraki/a...dk-quick-start.
Tài liệu này bao gồm tất cả các lớp và phương thức, các thông số và các giá trị đầu vào, đầu ra của SDK. Không giống như ví dụ dùng curl và Postman, bạn không cần phải xác định chính xác tài nguyên API sẽ trả về thông tin mà bạn cần. Tuy nhiên bạn cần phải biết các lớp MerakiSdkClient API được sắp xếp như thế nào và các phương thức nào đang có sẵn. Có một sự tương ứng một – một giữa dashboard API và Python SDK. Vì vậy khi bạn trở nên quen thuộc với một trong hai, bạn sẽ thấy phương pháp kia rất dễ hiểu. Chúng ta cũng cần truyền các khóa API key thông qua header X-Cisco-Meraki-API-Key header. Tất cả các chi tiết này được quản lý tự động bởi SDK cũng như là các cơ chế điều hướng redirect mà chúng ta phải thay đổi thủ công trong ví dụ của curl.
Thu thập giá trị organization ID của tài khoản DEVNET sandbox thì dễ dàng bằng cách kích hoạt phương thức organizations.get_organizations() trong lớp API client. Biến ORGS trong ví dụ bên dưới chứa một danh sách tất cả các organization mà tài khoản sandbox này là thành viên. Kế tiếp, bạn tạo ra một vòng lặp for trên tất cả các tổ chức này và hiển thị ra màn hình organization ID và tên của tổ chức.
Kế tiếp, bạn tạo ra một từ điển trống được gọi là PARAMS và thêm vào đó một khóa organization_id với giá trị 549236. Đây là giá trị organization ID của tài khoản sandbox. Bạn vẫn dùng Meraki API client, nhưng trong trường hợp này, bạn kích hoạt phương thức networks.get_organization_networks(). Cũng như trong ví dụ REST API dùng curl và Postman, bạn phải khai báo organization ID khi xây dựng địa chỉ sau cùng để truy cập danh sách của các mạng.
Phương thức get_organization_networks() method nhận đầu vào là tự điển params, chứa cùng giá trị organization ID nhưng là ở dạng Python dictionary. Biến NETS chứa đầu ra của cuộc gọi API. Trong một vòng lặp khác, thông tin về từng mạng được hiển thị ra cổng console. Cuối cùng, bạn sẽ lấy danh sách của các thiết bị là một phần của mạng có ID là
ID L_646829496481099586. Đây là ID của mạng “DevNet Always on Read Only”.
Trong trường hợp này, bạn dùng phương thức devices.get_network_devices() của Meraki API client và lưu kết quả trong biến DEVICES. Bạn thực thi vòng lặp DEVICES, và cho mỗi thiết bị trong danh sách, trích xuất và in ra cổng console mô hình thiết bị, số thứ tự, địa chỉ MAC và phiên bản firmware. Chạy đoạn mã Python sẽ có kết quả như bên dưới:
Cisco Meraki là một giải pháp mạng đầy đủ, sử dụng cloud.
- Các giải pháp không dây, chuyển mạch, bảo mật và quản lý thiết bị di động MDM, quản lý dùng giao diện web.
- Xây dựng ngay từ đầu cho quản lý trên đám mây.
- Tích hợp phần cứng, phần mềm và cách dịch vụ điện toán đám mây.
Meraki trở thành một phần của Cisco sau khi Cisco mua lại vào năm 2012. Danh mục sản phẩm của Meraki khá lớn, bao gồm các sản phẩm giám sát mạng không dây, các sản phẩm chuyển mạch switching, các sản phẩm bảo mật và video. Yếu tố khác biệt của Meraki so với các sản phẩm tương tự của Cisco và các nhà cung cấp khác là sản phẩm Meraki được quản lý dựa trên đám mây. Nếu nhìn từ góc độ lập trình, nền tảng cloud của Meraki cung cấp vài loại API: Captive Portal API, Scanning API, MV Sense Camera API, Dashboard API.
Nền tảng đám mây Meraki cũng cung cấp cơ chế webhook, trong đó các ứng dụng có thể đăng ký để nhận các cảnh báo được gửi từ Meraki khi một sự kiện xảy ra. Một cảnh báo Meraki được định dạng JSON có thể được cấu hình để gửi đến một URL duy nhất, nơi đó nó sẽ được xử lý, lưu trữ và thực thi các hành động tiếp theo để kích hoạt quy trình làm việc tự động hóa.
API Captive Portal mở rộng sức mạnh của chức năng trang Meraki tích hợp bằng cách cung cấp đầy đủ quyền kiểm soát nội dung và tiến trình xác thực mà người dùng tương tác khi kết nối với mạng không dây Meraki. Điều này có nghĩa là quản trị viên mạng hoàn toàn có thể tùy chỉnh trang cổng thông tin portal, bao gồm trải nghiệm cho khách hàng khi kết nối với mạng, giao diện của trang web và các quy trình xác thực và thanh toán.
Scanning API tận dụng các thiết bị thông minh Meraki được trang bị chức năng không dây và BLE (Bluetooth Low Energy) để cung cấp các phân tích vị trí và báo cáo về hành vi của người dùng. Điều này có thể đặc biệt hữu ích trong các môi trường bán lẻ, chăm sóc sức khỏe và doanh nghiệp. Các thông tin về người dùng và thông tin kinh doanh có thể được trích xuất để biết về xu hướng và sự tham gia và hành vi của người dùng. API loại này cung cấp dữ liệu trong thời gian thực và có thể được sử dụng để phát hiện các thiết bị Wi-Fi và BLE. Dữ liệu dưới định dạng JSON được xuất tới một máy chủ được chỉ định thông qua HTTP POST. Tại đây, dữ liệu này có thể được xử lý thêm và các ứng dụng có thể được xây dựng trên dữ liệu nhận được. Meraki có thể ước tính vị trí của các máy khách được kết nối với mạng.
Loại API MV Sense Camera tận dụng bộ xử lý tích hợp mạnh mẽ và kiến trúc duy nhất để chạy khối lượng công việc của lĩnh vực học máy ở lớp mạng biên. Thông qua MV Sense API của Meraki, các ứng dụng phần mềm có thể tích hợp các chức năng phát hiện, phân loại và theo dõi đối tượng được hiển thị. Ví dụ: bạn có thể trích xuất thông tin chi tiết về doanh nghiệp từ nguồn cấp dữ liệu video. Các loại API liên quan đến đầu cuối đều được cung cấp thông qua hai giao thức là REST API và MQTT. MQ Telemetry Transport (MQTT) là một giao thức truyền tải tin nhắn xuất bản / đăng ký máy khách / máy chủ. Nó nhẹ, đơn giản, mang tính mở và dễ thực hiện. MQTT lý tưởng để sử dụng trong các môi trường hạn chế như IoT và giao tiếp giữa máy với máy vì lưu lượng sửa dụng là rất nhỏ.
Các loại API Meraki được đề cập cho đến lúc này chủ yếu được sử dụng để trích xuất dữ liệu từ nền tảng đám mây và xây dựng các phần mềm để tích hợp và ứng dụng với dữ liệu đó. API Dashboard, được đề cập tiếp theo, cung cấp các điểm cuối và tài nguyên để cấu hình, quản lý và giám sát tự động nền tảng đám mây Meraki. Dashboard API được thiết kế để có tính mở và có thể được sử dụng cho nhiều mục đích, nhiều trường hợp. Loại Dashboard API là một loại API mới, hiện đại dùng RESTful API và các hàm gọi HTTPS đến một địa chỉ URL và JSON như là một định dạng mà con người có thể đọc được. Dashboard API là một công cụ mở có thể được dùng cho nhiều mục đích.
Một vài chức năng phổ biến của Dashboard API là
- Tạo mới các tổ chức, các mạng, các quản trị viên, các thiết bị.
- Cấu hình mạng ở qui mô lớn
- Thêm vào hoặc xóa bớt các thiết bị
- Tùy chỉnh các dashboard và các ứng dụng.
Để có quyền truy cập vào dashboard API, trước tiên bạn cần bật API đó. Bắt đầu bằng cách đăng nhập vào https://dashboard.meraki.com, sau đó dẫn hướng đến Organization > Settings. Từ đó, cuộn xuống và định vị phần có tên Truy cập Dashboard API và đảm bảo bạn chọn Bật truy cập và lưu các thay đổi cấu hình ở cuối trang. Khi bạn đã bật API, hãy chọn tên người dùng của bạn ở góc trên cùng bên phải của trang web và chọn My Profile. Trong hồ sơ của bạn, hãy cuộn xuống và định vị phần có tên Truy cập Dashboard API và chọn Tạo khóa API mới. Khóa API bạn tạo được liên kết với tài khoản của bạn. Bạn có thể tạo, thu hồi và tạo lại khóa API trong hồ sơ của mình. Hãy đảm bảo bạn sao chép và lưu trữ khóa API của mình ở nơi an toàn, vì bất kỳ ai có khóa này đều có thể mạo danh bạn và có quyền truy cập thông qua API Bảng điều khiển cho tất cả thông tin mà tài khoản của bạn có quyền truy cập. Vì lý do bảo mật, khóa API không được lưu trữ ở dạng văn bản thuần túy trong hồ sơ của bạn, vì vậy nếu bạn mất khóa, bạn sẽ phải thu hồi khóa cũ và tạo khóa mới. Nếu tin rằng khóa API của mình đã bị xâm phạm, bạn có thể tạo khóa API mới để tự động thu hồi khóa API hiện có.
Mỗi yêu cầu API Dashboard phải chỉ định khóa API trong tiêu đề yêu cầu. Nếu khóa API bị thiếu hoặc không chính xác được chỉ định, API trả về thông báo lỗi HTTP 404. Lỗi HTTP 404 có nghĩa là tài nguyên API bạn đang cố gắng tiếp cận không thể tìm thấy trên máy chủ. Mã lỗi này ngăn chặn rò rỉ thông tin và trái phép khám phá tài nguyên API. Khóa cho tiêu đề yêu cầu xác thực là X-Cisco- Meraki-API-Key và giá trị là khóa API bạn thu được trước đó. Tóm lại, để gọi Meraki Dashboard API, chúng ta cần có API key. Tiếp theo, chúng ta sẽ khảo sát vấn đề bảo mật API của Meraki.
Để giảm thiểu các cuộc tấn công lạm dụng và tấn công từ chối dịch vụ, Dashboard API của Meraki được giới hạn ở 5 lệnh gọi API mỗi giây cho mỗi tổ chức. Riêng trong giây đầu tiên, chúng ta được phép gọi thêm 5 cuộc gọi API. Trong hai giây đầu tiên, số cuộc gọi API tối đa được phép là 15. Nếu vượt quá giới hạn tỷ lệ, thông báo lỗi với mã trạng thái HTTP 429 sẽ được trả về. Kỹ thuật khống chế tốc độ mà Dashboard API sử dụng dựa trên mô hình token-bucket. Token-bucket là một thuật toán được dùng để kiểm tra là dữ liệu được truyền trong một khoảng thời gian nào đó là tương thích với mức băng thông và phần bùng nổ cho phép. Dựa trên mô hình này, nếu số lượng yêu cầu API vượt qua ngưỡng đã thiết lập trong một khoảng thời gian nhất định, bạn phải đợi một khoảng thời gian cho đến khi bạn có thể thực hiện một yêu cầu API mới. Thời gian bạn phải chờ phụ thuộc vào số lượng yêu cầu bạn đã thực hiện vượt quá giới hạn cho phép; bạn càng thực hiện nhiều yêu cầu, bạn càng phải chờ nhiều thời gian.
Dashboard API sử dụng URL https://api.meraki.com/api/v0. Hãy nhớ rằng khi nói về API, hiện tại và tương lai sẽ có xuất hiện nhiều phiên bản mới. Hãy luôn kiểm tra các tài liệu API liên quan để có các thông tin mới nhất. Để giúp người dùng sử dụng dễ dàng các sản phẩm Meraki, Dashboard API cũng được sắp xếp để bắt chước cấu trúc của Meraki dashboard. Khi bạn đã trở nên quen thuộc với giao diện GUI hoặc API, bạn có thể dễ dàng chuyển đổi qua lại giữa chúng. Cấu trúc của Dashboard API có dạng như sau:
- Organizations
- Networks
- Devices
- Uplink
- Devices
- Networks
Phần lớn các API call sẽ cần thông số organization ID hay là network ID như là một thành phần của đầu cuối. Khi bạn có các ID này, bạn có thể xây dựng và thực hiện các cuộc gọi nâng cao khác để thu thập dữ liệu, tạo mới và cập nhật tài nguyên, cấu hình và thực hiện các thay đổi đến hạ tầng mạng. Bạn cũng nên nhớ là để gọi API thì cần API key. Nếu Meraki dashboard chứa một số lượng lớn các tổ chức, các mạng hoặc các thiết bị, bạn có thể cân nhắc việc sử dụng cơ chế phân trang pagination khi gọi API. Đây là cơ chế được dùng khi lượng dữ liệu trả về từ một cuộc gọi API là quá lớn và cần phải giới hạn đến một tập hợp con.
Dashboard API hỗ trợ ba loại thông số truy vấn cho phân trang:
Mỗi trang (perPage): Số lượng các thành phần cần trả về trong cuộc gọi API hiện hành.
Bắt đầu sau một giá trị nào đó (startingAfter): Một giá trị được dùng để chỉ ra là các dữ liệu trả về sẽ bắt đầu ngay sau giá trị này.
Kết thúc trước khi (endingBefore): Một giá trị được dùng để chỉ ra các dữ liệu trả về sẽ kết thúc ngay trước giá trị này.
Hai kiểu thông số startingAfter và endingBefore khác nhau về ảnh hưởng lên đầu cuối API, các thông số này thuộc được gán các nhãn thời gian trong đó chỉ ra các khoảng thời gian mà dữ liệu sẽ được trả về hay các giá trị số nguyên chỉ ra ID hoặc một dãy các ID.
Dashboard API cũng hỗ trợ các hành động theo lô, giúp chúng ta có thể chạy nhiều tác vụ cùng lúc trong một phiên. Tính năng này lý tưởng cho việc cấu hình khởi tạo ban đầu cho một số lượng lớn thiết bị hoặc thực hiện một thay đổi cấu hình lớn trên toàn mạng. Các hành động theo lô cũng cung cấp cơ chế để tránh các kỹ thuật hạn chế tốc độ thực thi trong các tác vụ thay đổi cấu hình theo diện rộng vì bạn chỉ hiện thực tất cả các thay đổi trong một hoặc vài phiên thay vì phải dùng một số lượng lớn các cuộc gọi API.
Các phiên chạy theo dạng lô có thể hoạt động theo kiểu đồng bộ, nghĩa là chờ cho API trả kết quả về trước khi tiếp tục hoặc bất đồng bộ, nghĩa là chương trình không cần chờ API trả kết quả về khi một cuộc gọi được đưa vào hàng đợi để chờ xử lý.
Với các tác vụ chạy theo dạng lô, bạn có thể tự tin rằng tất cả các cập nhật chứa trong các phiên này được xác nhận là thành công bởi vì các lệnh dạng lô là chạy theo chế độ nguyên tử: được tất cả hay mất tất cả. Sau khi bạn đã bật Meraki Dashboard API, đã tạo ra API key và lưu nó trong một nơi an toàn, bạn có thể bắt đầu tương tác với API. Để có thể thực hành Meraki, các bạn có thể tận dụng các lab trực tuyến miễn phí của Cisco ở địa chỉ https://developer.cisco.com/sandbox. Khóa API key cho sandbox này là 15da0c6ffff295f16267f88f98694cf29a86ed87.
Lúc này, bạn cần phải lấy thông tin về organization ID cho tài khoản này. Chúng ta sẽ dùng curl và Postman để lấy thông tin organization ID cho DEVNET sandbox và Meraki Python SDK. Địa chỉ URL cho API Dashboard là https://api.meraki.com/api/v0. Để lấy tên tổ chức cho tài khoản với khóa API key, bạn sẽ thêm vào phần tài nguyên cần truy cập /organizations. Kết quả sau cùng sẽ là https://api.meraki.com/api/v0/organizations.
Bạn cũng cần bao gồm phần header X-Cisco-Meraki-API-Key cho mục đích xác thực. Phần header này chứa khóa API key cho tài khoản DEVNET Sandbox. Lệnh curl trong trường hợp này sẽ có dạng như sau:
curl -I -X GET \
--url 'https://api.meraki.com/api/v0/organizations' \
-H 'X-Cisco-Meraki-API-Key:15da0c6ffff295f16267f88f98694cf29a86ed87'
Kết quả trả về sẽ có dạng:
HTTP/1.1 302 Found
Server: nginx
Date: Sat, 17 Aug 2019 19:05:25 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Cache-Control: no-cache, no-store, max-age=0,
must-revalidate
Pragma: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
X-Frame-Options: sameorigin
X-Robots-Tag: none
Location:
https://n149.meraki.com/api/v0/organizations
X-UA-Compatible: IE=Edge,chrome=1
X-Request-Id: 87654dbd16ae23fbc7e3282a439b211c
X-Runtime: 0.320067
Strict-Transport-Security: max-age=15552000;
includeSubDomains
Trong kết quả, mã trả về của cuộc gọi API có giá trị là 302. Kết quả này chỉ ra là cuộc gọi API bị điều hướng redirext đến một URL có giá trị chỉ ra trong Location header. Các điều hướng như tên có thể xảy ra với bất kỳ cuộc gọi API nào bên trong API Dashboard, bao gồm các POST, PUT và DELETE. Đối với các cuộc gọi hàm GET, điều hướng được chỉ thông qua mã trạng thái 302. Đối với các cuộc gọi non-GET, kết quả trả về có mã từ 307 hay 308.
Khi chúng ta dùng tùy chọn –I trong curl, chỉ có phần header của kết quả là hiển thị cho người dùng. Đến lúc này, chúng ta sẽ cần chạy lệnh curl một lần nữa. Lần này chúng ta sẽ dùng tài nguyên là
https://n149.meraki.com/api/v0/organizations, không sử dụng tùy chọn –I, thêm vào một Accept header để chỉ ra kết quả trả về của cuộc gọi phải ở định dạng JSON. Lệnh lúc này sẽ có dạng:
curl -X GET \
--url 'https://n149.meraki.com/api/v0/organizations' \
-H 'X-Cisco-Meraki-API-Key:
15da0c6ffff295f16267f88f98694cf29a86ed87'\
-H 'Accept: application/json'
Kết quả lúc này sẽ chứa organization ID trong định dạng JSON.
[
{
"name":"DevNet Sandbox",
"id":"549236"
}
]
Bây giờ chúng ta hãy thử khảo sát cách thức chúng ta dùng Postman để lấy thông tin organization-ID. Postman là một công cụ phổ biến được dùng để khảo sát API và tạo ra các yêu cầu truy vấn. Postman có các tính năng hỗ trợ được xây dựng bên trong cho các cơ chế xác thực khác nhau, tạo ra các header, các thông số, các tổng hợp các truy vấn và các môi trường. Mặc định Postman có tùy chọn Automatically Follow Redirects được bật trong phần Settings, vì vậy bạn không cần phải thay đổi địa chỉ https://api.meraki.com/api/v0/organizations vì nó đã được Postman thực hiện ngầm ở bên dưới. Nếu bạn tắt tính năng Automatically Follow Redirects này, bạn sẽ thấy kết quả của Postman chính xác giống như trong curl.
Hình bên dưới mô tả Postman tương tác với tất cả các trường sao cho Meraki REST API sẽ trả về tên tổ chức mà tài khoản này có thể truy cập.
Trong kết quả trên, bạn thấy kết quả hiển thị ở dạng JSON giống như trước, với cùng tên tổ chức organization ID của tài khoản DEVNET sandbox.
Chúng ta hãy tiếp tục khảo sát Dashboad APU và tìm thêm thông tin về các mạng kết hợp với tên của tổ chức organization. Nếu chúng ta tìm kiếm thông tin về API ở địa chỉ https://developer.cisco.com/meraki/a...ation-networks,
Bạn sẽ thấy rằng để tìm ra các mạng thuộc về một tổ chức cụ thể, bạn cần thực hiện hàm gọi GET đến địa chỉ https://api.meraki.com/api/v0/organizations/{organizationId}/networks, trong đó {organizationId} là ID mà bạn có được trước đó. Bạn cũng khám phá ra rằng địa chỉ URL của sandbox là https://n149.meraki.com/api/v0. Bạn có thể bổ sung địa chỉ API với thông tin này bằng lệnh curl sau:
curl -X GET \
--url 'https://n149.meraki.com/api/v0/organizations/549236/
networks' \
-H 'X-Cisco-Meraki-API-Key: 15da0c6ffff295f16267f88f98694c
f29a86ed87'\
-H 'Accept: application/json'
Kết quả trả về từ API sẽ chứa một danh sách của tất cả các mạng thuộc về tổ chức. Kết quả có dạng giống như bên dưới:
[
{
"timeZone" : "America/Los_Angeles",
"tags" : " Sandbox ",
"organizationId" : "549236",
"name" : "DevNet Always On Read Only",
"type" : "combined",
"disableMyMerakiCom" : false,
"disableRemoteStatusPage":true,
"id":"L_646829496481099586"
},
{
"organizationId":"549236",
"tags":null,
"timeZone":"America/Los_Angeles",
"id":"N_646829496481152899",
"disableRemoteStatusPage":true,
"name":"test - mx65",
"disableMyMerakiCom" : false,
"type":"appliance"
},
Kết quả trả về của ví dụ bên dưới hiển thị một danh sách của tất cả các mạng thuộc về organization ID 549236. Đối với từng mạng, kết quả chứa cùng một thông tin mà chúng ta thấy trong Meraki Dashboard. Bước kế tiếp, chúng ta sẽ sử dụng kết quả network-ID đầu tiên để tìm hiểu về Meraki Dashboard API.
Bây giờ chúng ta có thể lấy cùng một thông tin – danh sách của tất cả các mạng là một phần của organization-ID bằng cách dùng Postman. Như bạn đã thấy, mặc định Postman thực hiện chế độ điều hướng một cách tự động. Vì vậy bạn có thể chỉ ra API đầu cuối ở địa chỉ https://api.meraki.com/api/v0/organi...49236/networks.
Bạn cần đảm bảo là dùng phương thức GET, có bao gồm luôn X-Cisco-Meraki-API-Key header cho vấn đề xác thực và Accept header, trong đó bạn chỉ ra là sẽ chấp nhận kết quả trả về ở định dạng JSON. Hình bên dưới mô tả Postman thu thập hết danh sách tất cả các networks thuộc về tổ chức có ID là ID 549236.
Phần thân của thông điệp trả về sẽ chứa chính xác cùng một thông tin như trước: một danh sách đầy đủ của các mạng là một phần của DEVNET sandbox. Kế tiếp, bạn có thể thu thập danh sách của tất cả các thiết bị của một mạng có tên là “DevNet Always On Read Only” và có ID là ID L_646829496481099586. Cũng giống trong các bước trước, bạn bắt đầu bằng cách kiểm tra tài liệu API để tìm ra địa chỉ API giúp trả về kết quả cho bạn.
Tài nguyên API chứa các thông tin bạn tìm kiếm là /networks/{networkId}/devices, như bạn có thể thấy từ địa chỉ https://developer.cisco.com/meraki/a...etwork-devices.
Bạn thêm vào phần URL cho địa chỉ https://n149.meraki.com/api/v0, sau đó cập nhật thêm biến
{networkId} với giá trị bạn thu thập được trong bước kế tiếp. Kết hợp tất cả cá thông tin này, địa chỉ trả về kết quả bạn đang tìm kiếm là https://n149.meraki.com/api/v0/networks/L_6468294
96481099586/devices. Lệnh curl được dùng trong trường hợp này là
curl -X GET \
--url
'https://n149.meraki.com/api/v0/networks/L_646829496481099586/
devices' \
-H 'X-Cisco-Meraki-API-Key:
15da0c6ffff295f16267f88f98694cf29a86ed87'\
-H 'Accept: application/json'
Kết quả trả về phải có dạng tương tự như bên dưới:
[
{
"wan2Ip" : null,
"networkId" : "L_646829496481099586",
"lanIp" : "10.10.10.106",
"serial" : "QYYY-WWWW-ZZZZ",
"tags" : " recently-added ",
"lat" : 37.7703718,
"lng" : -122.3871248,
"model" : "MX65",
"mac" : "e0:55:3d:17:d4:23",
"wan1Ip" : "10.10.10.106",
"address" : "500 Terry Francois, San
Francisco"
},
{
"switchProfileId" : null,
"address" : "",
"lng" : -122.098531723022,
"model" : "MS220-8P",
"mac" : "88:15:44:df:f3:af",
"tags" : " recently-added ",
"serial" : "QAAA-BBBB-CCCC",
"networkId" : "L_646829496481099586",
"lanIp" : "192.168.128.2",
"lat" : 37.4180951010362
}
]
Lưu ý từ kết quả là mạng “DevNet Always On Read Only” có hai thiết bị: thiết bị bảo mật MX65 và một cổng MS-220 có tám cổng. Kết quả cũng bao gồm các thông tin về vị trí địa lý lắp đặt thiệt bị, địa chỉ MAD, số serial number, tags, các model number và các thông tin khác. Cùng một thông tin có trong Meraki Dashboard. Theo tiếp tiến trình này, bạn có thể thu thập được cùng một thông tin, nhưng lần này là dùng Postman. Vì quá trình điều hướng diễn ra tự động, địa chỉ API là https://api.meraki.com/api/v0/networ...099586/devices.
Bạn thêm vào hai header Accept và X-Cisco-Meraki-API-Key với các giá trị tương ứng, chọn phương thức GET và nhấn nút Send. Nếu mọi thứ là suông sẻ, kết quả trả về là 200 OK và phần thân của thông điệp sẽ chứa cùng một thông tin được sử dụng với curl. Hình bên dưới mô tả cách Postman tương tác với tất cả các header và các trường cần thiết để lấy danh sách của tất cả các thiết bị của network có ID là L_646829496481099586.
Như vậy cho đến giờ, bạn đã khảo sát Meraki Dashboard API dùng curl và Postman. Đầu tiên bạn tìm cách thu thập thông số organization ID của tài khoản Sandbox Meraki. Sau đó, dựa trên ID đó, bạn tìm tất cả các mạng liên quan. Tiếp theo, dùng một trong những network ID để tìm ra tất cả những thiết bị có trong network đó. Đây là một phần trong những khả năng của Meraki API Dashboard.
Trong phần cuối của mục này, chúng ta hãy cùng nhau tìm hiểu về Meraki Python SDK. Có hai SDK cho Meraki: một phiên bản dùng Python và một phiên bản dùng Node.js. Bản SDK dùng Python 3, được hiện thực bao gồm đầy đủ các lớp, các phương thức và các hàm để đơn giản hóa cách thức người dùng tương tác với Dashboard bằng Python. Để truy cập SDK, bạn cần cài đặt meraki-sdk mô-đun.
Một trong những kinh nghiệm thực tế là hãy luôn dùng các môi trường ảo với tất cả các dự án Python. Khi một môi trường ảo được kích hoạt, bạn có thể chạy lệnh pip install meraki-sdk để tải về phiên bản mới nhất của SDK. Trong phần này, bạn sẽ theo cùng ba bước đã thực hiện: thu thập thông tin organization ID của DEVNET sandbox, lấy một danh sách của tất cả các mạng là một phần của tổ chức này, sau đó là thu thập tất cả các thiết bị thuộc về mạng “DevNet Always on Read Only”.
Đoạn mã Python để hoàn thành ba tác vụ này được trình bày bên dưới. Bạn cần import lớp MerakiSdkClient từ mô-đun meraki_sdk. Bạn dùng lớp MerakiSdkClient để tạo ra API client bằng cách truyền một khóa API như là một thông số và tạo ra một phiên bản có tên là MERAKI.
#! /usr/bin/env python
from meraki_sdk.meraki_sdk_client import MerakiSdkClient
#Cisco DevNet Sandbox Meraki API key
X_CISCO_MERAKI_API_KEY ='15da0c6ffff295f16267f88f98694cf29a86ed87'
#Establish a new client connection to the Meraki REST API
MERAKI =MerakiSdkClient(X_CISCO_MERAKI_API_KEY)
#Get a list of all the organizations for the Cisco DevNet account
ORGS = MERAKI.organizations.get_organizations()
for ORG in ORGS:
print("Org ID: {} and Org Name:{}".format(ORG['id'], ORG['name']))
PARAMS = {}
PARAMS["organization_id"] = "549236" # Demo Organization "DevNet Sandbox"
#Get a list of all the networks for the Cisco DevNet organization
NETS =MERAKI.networks.get_organization_networks(PARAM S)
for NET in NETS:
print("Network ID: {0:20s}, Name:{1:45s},Tags: {2:<10s}".format(\
NET['id'], NET['name'],str(NET['tags'])))
#Get a list of all the devices that are part of the Always On Network
DEVICES = MERAKI.devices.get_network_devices("L_646829496481 099586")
for DEVICE in DEVICES:
print("Device Model: {0:9s},Serial:{1:14s},MAC: {2:17}, Firmware:{3:12s}"\
.format(DEVICE['model'],
DEVICE['serial'], DEVICE['mac'], \
DEVICE['firmware']))
Sau khi bạn đã khởi tạo một phiên bản cho lớp MerakiSdkClient, bạn sẽ nhận được một API client cung cấp truy cập đến tất cả các phương thức của lớp. Bạn có thể tìm thấy tài liệu cho Python SDL này ở địa chỉ https://developer.cisco.com/meraki/a...dk-quick-start.
Tài liệu này bao gồm tất cả các lớp và phương thức, các thông số và các giá trị đầu vào, đầu ra của SDK. Không giống như ví dụ dùng curl và Postman, bạn không cần phải xác định chính xác tài nguyên API sẽ trả về thông tin mà bạn cần. Tuy nhiên bạn cần phải biết các lớp MerakiSdkClient API được sắp xếp như thế nào và các phương thức nào đang có sẵn. Có một sự tương ứng một – một giữa dashboard API và Python SDK. Vì vậy khi bạn trở nên quen thuộc với một trong hai, bạn sẽ thấy phương pháp kia rất dễ hiểu. Chúng ta cũng cần truyền các khóa API key thông qua header X-Cisco-Meraki-API-Key header. Tất cả các chi tiết này được quản lý tự động bởi SDK cũng như là các cơ chế điều hướng redirect mà chúng ta phải thay đổi thủ công trong ví dụ của curl.
Thu thập giá trị organization ID của tài khoản DEVNET sandbox thì dễ dàng bằng cách kích hoạt phương thức organizations.get_organizations() trong lớp API client. Biến ORGS trong ví dụ bên dưới chứa một danh sách tất cả các organization mà tài khoản sandbox này là thành viên. Kế tiếp, bạn tạo ra một vòng lặp for trên tất cả các tổ chức này và hiển thị ra màn hình organization ID và tên của tổ chức.
Kế tiếp, bạn tạo ra một từ điển trống được gọi là PARAMS và thêm vào đó một khóa organization_id với giá trị 549236. Đây là giá trị organization ID của tài khoản sandbox. Bạn vẫn dùng Meraki API client, nhưng trong trường hợp này, bạn kích hoạt phương thức networks.get_organization_networks(). Cũng như trong ví dụ REST API dùng curl và Postman, bạn phải khai báo organization ID khi xây dựng địa chỉ sau cùng để truy cập danh sách của các mạng.
Phương thức get_organization_networks() method nhận đầu vào là tự điển params, chứa cùng giá trị organization ID nhưng là ở dạng Python dictionary. Biến NETS chứa đầu ra của cuộc gọi API. Trong một vòng lặp khác, thông tin về từng mạng được hiển thị ra cổng console. Cuối cùng, bạn sẽ lấy danh sách của các thiết bị là một phần của mạng có ID là
ID L_646829496481099586. Đây là ID của mạng “DevNet Always on Read Only”.
Trong trường hợp này, bạn dùng phương thức devices.get_network_devices() của Meraki API client và lưu kết quả trong biến DEVICES. Bạn thực thi vòng lặp DEVICES, và cho mỗi thiết bị trong danh sách, trích xuất và in ra cổng console mô hình thiết bị, số thứ tự, địa chỉ MAC và phiên bản firmware. Chạy đoạn mã Python sẽ có kết quả như bên dưới: