Bắt đầu với PowerMax REST API: Đã đến lúc sử dụng REST

Vì vậy, sau vài năm và hơn 15.000 lượt xem, tôi đã quyết định làm mới bài đăng khét tiếng “Time for a REST” của mình và đặt nó vào một vị trí mới, cố định trên Info Hub. Trang web gốc đã ngừng hoạt động, vì vậy tôi đã viết lại và cập nhật bài đăng tại đây.

Bài đăng trên blog này sẽ không dạy bạn Python và nó giả định rằng bạn có các kỹ năng lập trình cơ bản. Tôi khuyên bạn nên học Learn Python the Hard Way — Hoàn toàn miễn phí. Nếu bạn muốn tìm hiểu sâu hơn, khóa học trị giá 60 đô la tại RealPython.com là khoản đầu tư xứng đáng cho bản thân bạn. 

Bài đăng trên blog này đề cập đến một số kiến ​​thức cơ bản về REST. Nếu bạn muốn tìm hiểu thêm, có rất nhiều thông tin có sẵn. Bạn thậm chí có thể hỏi ChatGPT, một công cụ đang rất thịnh hành hiện nay.

Tuy nhiên, tôi sẽ cung cấp một bản tóm tắt ngắn gọn ở đây. Nếu bạn đã biết về REST và chỉ muốn biết về PowerMax REST API, bạn có thể bỏ qua phần tiếp theo.

REST API là gì?

REST, viết tắt của Representational State Transfer, là một phong cách kiến ​​trúc định hình các dịch vụ web. Nó không phải là một tiêu chuẩn mà là một phong cách mô tả hành động chuyển trạng thái của một thứ gì đó bằng cách biểu diễn nó. Một API là một tập hợp các thói quen, giao thức và công cụ để xây dựng các ứng dụng phần mềm. Một API chỉ định cách các thành phần phần mềm nên tương tác và được sử dụng khi lập trình các thành phần UI. Về cơ bản, REST API cung cấp cho bạn một cách tương tác với một ứng dụng mà không cần phải biết mọi chi tiết về cách ứng dụng cơ bản được triển khai.

Tại sao lại là REST? Tôi có thể nghĩ ra nhiều lý do, nhưng đây là một số lý do hàng đầu khiến tôi sử dụng REST:

  • Đơn giản —REST dựa trên giao thức HTTP. Nếu bạn biết cách sử dụng trình duyệt web bằng cách nhập địa chỉ để lấy thông tin từ trang web, bạn đã biết một chút về REST.
  • Tiêu chuẩn công nghiệp —REST được sử dụng rộng rãi ở mọi nơi. Hãy xem bất kỳ ứng dụng web nào —ví dụ, Service Now, Amazon, maps.com, weatherchannel.com, v.v. —và bạn có thể thấy rằng nó có REST API. REST rất nhẹ và dễ bắt đầu. Hầu như mọi ứng dụng doanh nghiệp đều cung cấp giao diện REST và cách kết nối và lấy thông tin từ các REST API khác.  
  • Lựa chọn —Bạn không bị giới hạn bởi một bộ công cụ; bạn có thể sử dụng bất kỳ ngôn ngữ lập trình nào mà bạn đã quen thuộc để làm việc với REST. Điều này có nghĩa là bạn không phải thiết kế lại nếu bạn không muốn; tuy nhiên, có những công cụ tuyệt vời có thể thuyết phục bạn chọn một ngôn ngữ này thay vì ngôn ngữ khác. Các ngôn ngữ hiện đại, chẳng hạn như Python, rất dễ học và có rất nhiều tài nguyên và gói được viết sẵn để hỗ trợ.
  • Tính linh hoạt — Cung cấp giao diện REST vào sản phẩm của chúng tôi giúp mọi người dễ dàng cắm vào và xây dựng trên công việc đã được thiết kế sẵn trong hệ thống. Nó cũng cho phép các nhà cung cấp và khách hàng khác xây dựng các công cụ giao diện với PowerMax REST API và tăng thêm tùy chọn cho khách hàng.

Video YouTube này cung cấp lời giải thích tuyệt vời về các API REST khác và một số ý tưởng về cách sử dụng chúng: Các khái niệm và ví dụ về API REST .

REST thực sự là thứ giúp tự động hóa trở nên khả thi. PowerMax REST API cho phép cấu hình lưu trữ trở nên năng động và tự động thông qua các công cụ Cơ sở hạ tầng dưới dạng Mã (IaC) như Ansible, Terraform, Puppet, v.v.

REST cũng rất hữu ích cho việc báo cáo và khai thác dữ liệu; chúng tôi có nhiều khách hàng lấy thông tin từ hệ thống vào các công cụ như Splunk và Grafana.

Các loại lệnh gọi REST

REST là tất cả về trạng thái—lấy trạng thái của các đối tượng, tạo đối tượng mới bằng cách cung cấp trạng thái đại diện của chúng và thay đổi trạng thái của đối tượng hiện có hoặc xóa đối tượng. 

Unisphere cho PowerMax REST API hỗ trợ các loại lệnh gọi REST sau:

  • GET—Lấy thông tin trạng thái của các đối tượng.
  • POST—Gọi để tạo một đối tượng.
  • PUT—Chỉnh sửa trạng thái của đối tượng. Thông thường, bạn phải thực hiện GET để đảm bảo rằng bạn có tất cả thông tin trước khi có thể thực hiện PUT.
  • XÓA—Xóa đối tượng.

Để biết thêm thông tin chung về REST, hãy xem Bắt đầu với REST API .

Bảo mật quyền truy cập REST API của bạn

Bảo mật luôn là mối quan tâm và khi làm việc với REST API, bạn sẽ cần phải xác thực. Phương pháp có thể khác nhau, tùy thuộc vào API, Một số API sẽ hoạt động với mã thông báo, trong khi những API khác sẽ hoạt động với tên người dùng và mật khẩu (Xác thực cơ bản).   

Đối với PowerMax REST API, mỗi lệnh gọi được xác minh bằng Xác thực cơ bản qua HTTPS theo tên người dùng và mật khẩu. Với phương pháp xác thực này, người dùng có thể có các vai trò chi tiết và các lệnh gọi REST của họ có thể bị giới hạn ở các mảng/nhóm lưu trữ và hàm cụ thể. Ví dụ: người dùng có thể được thiết lập để người dùng chỉ có thể tạo ảnh chụp nhanh cho một tập hợp các nhóm lưu trữ cụ thể. Để biết thêm thông tin về quyền truy cập dựa trên vai trò, hãy xem tài liệu Unisphere cho PowerMax API .

Tôi có thể làm gì với PowerMax REST API?

Trước khi chúng ta bắt đầu thực hiện lệnh gọi API, chúng ta nên xem xét những gì có thể thực hiện được với PowerMax REST API. Hình sau đây cung cấp tổng quan cấp cao về các tác vụ chính mà bạn có thể thực hiện. Ngoài các thành phần được hiển thị, còn có API di chuyển, API Workload Planner và API vVOL.

Kiểm soát dựa trên nhóm lưu trữ với PowerMax REST API

Unisphere for PowerMax được thiết kế xung quanh khái niệm nhóm lưu trữ để quản lý các ứng dụng. Nhóm lưu trữ là một vùng chứa cho một tập hợp các thiết bị có liên quan theo một cách nào đó, thường là đại diện cho một ứng dụng hoặc một đối tượng thuê có dữ liệu trên mảng PowerMax.

Hầu hết các hoạt động sử dụng REST API đều được xây dựng để tận dụng nhóm lưu trữ như một thực thể điều khiển—ví dụ: SnapVX và SRDF. Sử dụng nhóm lưu trữ để quản lý sẽ giảm số lượng đối tượng mà người quản trị lưu trữ cần quản lý. Một nhóm lưu trữ phải tồn tại để che giấu các thiết bị cho máy chủ để truy cập thông qua SAN để REST có thể tận dụng cấu trúc này. 

Một số quy trình cũ có thể cần được làm lại để phù hợp với quy trình hoạt động của nhóm lưu trữ. Theo truyền thống, hệ điều hành phản ứng không tốt với các khối lượng bị xóa và thêm lại; tuy nhiên, hệ điều hành hiện đại không còn nhạy cảm với những loại thay đổi này nữa.

Truy cập tài liệu và lược đồ API PowerMax

Bây giờ chúng ta đã tìm hiểu về REST và một số khả năng của PowerMax REST API, chúng ta có thể xem xét thực hiện lệnh gọi REST API thực tế. Để thực hiện lệnh gọi REST, bạn sẽ cần biết cấu trúc của lược đồ API.

Tất cả các lược đồ REST API cho các sản phẩm của Dell đều được công bố trên https://developer.dell.com . Trang web này cung cấp quyền truy cập không giới hạn để hỗ trợ các nhà phát triển có thể không có quyền truy cập vào tài liệu hỗ trợ của Dell. Từ phần tổng quan, tài liệu, bao gồm các tải trọng mẫu và phản hồi, có thể được tải xuống trong tệp OpenAPI.json hoặc bạn có thể duyệt tài liệu trên trang web.

API PowerMax được tổ chức theo tài nguyên chức năng. Mỗi lệnh gọi API được thêm vào trước https://{{ipaddress|hostname}}/univmax/restapi , trong đó ipaddress|hostname là địa chỉ máy chủ Unisphere for PowerMax quản lý mảng mà bạn muốn kiểm soát hoặc thu thập thông tin về. Phần này của URI được gọi là URI cơ sở.

Tùy thuộc vào những gì bạn muốn làm tiếp theo, bạn sẽ cần xem tài liệu và làm theo cây tài nguyên. Bất kỳ lệnh gọi API quản lý đang hoạt động nào đến mảng PowerMax sẽ có phiên bản được chỉ định sau URI, ví dụ:   https://{{ipaddress|hostname}}/univmax/restapi/{{API_version}}/sloprovisioning/symmetrix

 Cuộc gọi API này sẽ tìm thông tin về mảng nào được máy chủ Unisphere quản lý.  

Thực hiện cuộc gọi REST

Một lệnh gọi GET đơn giản sử dụng công cụ Client for URL cURL trông giống như thế này:

curl –url https://UnipshereĐịa chỉ IP:8443/univmax/restapi/version –insecure -u tên người dùng:verysecretpassword 

Trạng thái được truyền và nhận trong JSON. JSON là viết tắt của JavaScript Object Notation. JSON dễ đọc, bao gồm các cặp khóa giá trị. Khóa nằm bên trái và giá trị nằm bên phải, với : phân tách khóa và giá trị.

Phản hồi cho lệnh gọi API phiên bản GET ở trên là một tải trọng JSON chứa phiên bản Unisphere, phiên bản API hiện tại và danh sách các phiên bản API được hỗ trợ. Sau đây là một ví dụ:

{
  "phiên bản": "T10.0.1.448",
  "api_version": "100",
  "supported_api_versions": [
    "100",
    "92",
    "91"
  ]
}

Thực hiện lệnh gọi POST hoặc PUT sẽ tạo hoặc cập nhật một đối tượng trên mảng PowerMax. Không giống như lệnh gọi GET, đơn giản hơn nhiều, bạn cần gửi một tải trọng mô tả đối tượng bạn muốn tạo hoặc những thay đổi bạn muốn thực hiện.

curl -X ĐẶT \
  -H "Loại nội dung: application/json" \
  -H "Ủy quyền: Cơ bản <tên người dùng:mật khẩu được mã hóa base64>" \
  -d ' {
   "executionOption": "ĐỒNG BỘ",
   "storageGroupId": "API_Created_SG",
  "srpId": "SRP_1",
   "sloBasedStorageGroupParam": [
    {
       "thuộc tính khối lượng": [
        {
           "đơn vị dung lượng": "TB",
           "kích thước_khối lượng": "1",
          "số_vols": 2,
           "Định danh khối lượng": {
             "volumeIdentifierChoice": "tên_nhận_dạng",
             "identifier_name": "API_Created_1TB_Volume"
          }
        },
        {
           "đơn vị dung lượng": "GB",
           "kích thước_khối lượng": "1",
          "số_vols": 2,
           "Định danh khối lượng": {
             "volumeIdentifierChoice": "tên_nhận_dạng",
             "identifier_name": "API_Created_1GB_Volume"
          }
        }
      ]
    }
  ]
}' \
  "https://{{địa chỉ IP|tên máy chủ}}/univmax/restapi/100/sloprovisioning/symmetrix/000120200287”

 

Sau đây là phân tích các phần khác nhau của lệnh cURL:

-X PUT : Chỉ định rằng chúng ta đang sử dụng phương thức HTTP PUT để cập nhật tài nguyên.

-H “Content-Type: application/json” : Chỉ định loại nội dung của phần thân yêu cầu là JSON.

-H “Authorization: Basic <tên người dùng được mã hóa base64:mật khẩu>” : Chỉ định tiêu đề ủy quyền với chuỗi được mã hóa base64 của tên người dùng và mật khẩu PowerMax của bạn. Lưu ý rằng đây chỉ là một ví dụ; bạn không bao giờ nên tiết lộ tên người dùng và mật khẩu của mình ở dạng văn bản thuần túy.

-d ‘payload’ : Chỉ định payload JSON. Trong ví dụ này, nó sẽ tạo một nhóm lưu trữ trên mảng serial 000120200287 với bốn ổ đĩa, hai ổ 1 TB và hai ổ 1 GB.

“https://{{ipaddress|hostname}}/univmax/restapi/100/sloprovisioning/symmetrix/000120200287” : Chỉ định URL của tài nguyên để tạo đối tượng.

Xây dựng payload cho các lệnh gọi POST và PUT của bạn thường là phần khó nhất khi tạo lệnh gọi REST. Tài liệu API bao gồm các ví dụ có thể sao chép và dán với các khóa tối thiểu bắt buộc. Lưu ý rằng có các khóa bổ sung có thể được thêm vào để tận dụng các tính năng nâng cao hơn nếu quy trình làm việc của bạn yêu cầu.

 

Ngoài những điều cơ bản

Đến đây, chúng ta đã thảo luận về cấu trúc lệnh gọi API và cách tạo một số lệnh cURL, nhưng đó không thực sự là tự động hóa, phải không?

Để thực sự tận dụng API, bạn sẽ muốn viết một số tập lệnh có thể tái sử dụng. Và đó là nơi chúng tôi ở đây để giúp bạn. Phần tiếp theo giới thiệu cho bạn về Python SDK của chúng tôi, được tải sẵn các hàm được viết sẵn và có tài liệu bao gồm tất cả các chức năng API chính, đưa việc sử dụng API của bạn lên một tầm cao mới.

Khởi động quá trình phát triển REST của bạn với PyU4V

Nếu bạn mới bắt đầu sử dụng PowerMax REST API, tin tốt là có những công cụ có thể giúp bạn. Một nhóm nhỏ trong Dell Engineering đã tạo ra một thư viện Python SDK với hàng trăm hàm hữu ích có thể được sử dụng trong các tập lệnh Python. Thư viện được ghi chép đầy đủ tại https://pyu4v.readthedocs.io và mã nguồn có tại https://github.com/dell/PyU4V . Đã có nhiều bản phát hành ở giai đoạn này và số liệu thống kê tải xuống cho thấy nó được sử dụng rất nhiều.

PyU4V có thể được cài đặt trên hệ thống có Python. Chỉ cần nhập pip install PyU4V để cài đặt phiên bản mới nhất.

Phiên bản PyU4V sẽ khớp với phiên bản Unisphere. Bạn có thể sử dụng các phiên bản PyU4V cũ hơn để truy cập các phiên bản cũ hơn của các điểm cuối. Chúng sẽ tiếp tục hoạt động và trả về cùng một thông tin bất kể phiên bản Unisphere; tuy nhiên, đối với chức năng mới nhất, bạn nên hướng đến phiên bản mới nhất.

Sau khi cài đặt thư viện hàm PyU4V, bạn có thể bắt đầu viết tập lệnh của mình.

Các hàm được viết sẵn của PyU4V được tổ chức thành các mô-đun hàm. Chi tiết đầy đủ có trên trang web tài liệu:

https://pyu4v.readthedocs.io/en/latest/quick_start.html#pyu4v-unisphere-rest-coverage 

Bạn có thể muốn cài đặt một IDE tốt để giúp bạn viết mã (IDE là Môi trường phát triển tích hợp. Nó giúp theo dõi các biến và tự động hoàn thành tên phương thức và lệnh gọi biến, v.v.). Tôi thực sự thích PyCharm; Tôi chắc rằng còn có những IDE khác, nhưng IDE này phục vụ tôi rất tốt.

Như với bất kỳ tác vụ lập trình nào, chúng ta thường bắt đầu bằng Hello World!. Trong trường hợp này, tôi sẽ kết nối bạn với phiên bản Unisphere của bạn và liệt kê các mảng được đính kèm.

Chạy tập lệnh như sau:

Các ví dụ khác có trong phần hướng dẫn lập trình viên của tài liệu PyU4V ; hãy dành thời gian để xem qua chúng. Đối với bất kỳ lệnh gọi nào không được đề cập trong PyU4V, bạn luôn có thể sử dụng các phương thức tùy chỉnh. Tôi sẽ viết thêm về điều này trong bài đăng tiếp theo.

Bài viết này đã được rút ngắn so với độ dài ban đầu, hy vọng sẽ giúp bạn đọc dễ hiểu hơn.