本繁體中文版使用機器翻譯,譯文僅供參考,若與英文版本牴觸,應以英文版本為準。
您好API伺服器
貢獻者
建議變更
_Hello API server_是示範如何Active IQ Unified Manager 使用簡單的REST用戶端、在靜態中叫用REST API的範例程式。範例程式會以Json格式提供API伺服器的基本詳細資料(伺服器僅支援「application/json」格式)。
使用的URI是:「https://<hostname>/api/datacenter/svm/svms.` 此範例程式碼採用下列輸入參數:
-
API伺服器IP位址或FQDN
-
選用:連接埠號碼(預設:443)
-
使用者名稱
-
密碼
-
回應格式(「application/json」)
若要叫用REST API、您也可以使用其他指令碼、例如JERSEY和REST-Easy來撰寫Java REST用戶端Active IQ Unified Manager 以供使用。您應該瞭解下列有關範例程式碼的考量事項:
-
使用HTTPS連線Active IQ Unified Manager 來叫用指定的REST URI
-
忽略Active IQ Unified Manager 由供應的憑證
-
在交握期間跳過主機名稱驗證
-
使用「javax.net.ssl.HttpsURLConnection`」建立URI連線
-
使用第三方程式庫(「org.apache.commons.codec.binary.Base64`」)來建構HTTP基本驗證中使用的Base64編碼字串
若要編譯及執行範例程式碼、您必須使用Java編譯器1.8或更新版本。
import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.security.SecureRandom; import java.security.cert.X509Certificate; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSession; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import org.apache.commons.codec.binary.Base64; public class HelloApiServer { private static String server; private static String user; private static String password; private static String response_format = "json"; private static String server_url; private static String port = null; /* * * The main method which takes user inputs and performs the * necessary steps * to invoke the REST URI and show the response */ public static void main(String[] args) { if (args.length < 2 || args.length > 3) { printUsage(); System.exit(1); } setUserArguments(args); String serverBaseUrl = "https://" + server; if (null != port) { serverBaseUrl = serverBaseUrl + ":" + port; } server_url = serverBaseUrl + "/api/datacenter/svm/svms"; try { HttpsURLConnection connection = getAllTrustingHttpsUrlConnection(); if (connection == null) { System.err.println("FATAL: Failed to create HTTPS connection to URL: " + server_url); System.exit(1); } System.out.println("Invoking API: " + server_url); connection.setRequestMethod("GET"); connection.setRequestProperty("Accept", "application/" + response_format); String authString = getAuthorizationString(); connection.setRequestProperty("Authorization", "Basic " + authString); if (connection.getResponseCode() != 200) { System.err.println("API Invocation Failed : HTTP error code : " + connection.getResponseCode() + " : " + connection.getResponseMessage()); System.exit(1); } BufferedReader br = new BufferedReader(new InputStreamReader((connection.getInputStream()))); String response; System.out.println("Response:"); while ((response = br.readLine()) != null) { System.out.println(response); } connection.disconnect(); } catch (Exception e) { e.printStackTrace(); } } /* Print the usage of this sample code */ private static void printUsage() { System.out.println("\nUsage:\n\tHelloApiServer <hostname> <user> <password>\n"); System.out.println("\nExamples:\n\tHelloApiServer localhost admin mypassword"); System.out.println("\tHelloApiServer 10.22.12.34:8320 admin password"); System.out.println("\tHelloApiServer 10.22.12.34 admin password "); System.out.println("\tHelloApiServer 10.22.12.34:8212 admin password \n"); System.out.println("\nNote:\n\t(1) When port number is not provided, 443 is chosen by default."); } /* * Set the server, port, username and password * based on user inputs. */ private static void setUserArguments( String[] args) { server = args[0]; user = args[1]; password = args[2]; if (server.contains(":")) { String[] parts = server.split(":"); server = parts[0]; port = parts[1]; } } /* * * Create a trust manager which accepts all certificates and * use this trust * manager to initialize the SSL Context. * Create a HttpsURLConnection for this * SSL Context and skip * server hostname verification during SSL handshake. * * * Note: Trusting all certificates or skipping hostname verification * is not * required for API Services to work. These are done here to * keep this sample * REST Client code as simple as possible. */ private static HttpsURLConnection getAllTrustingHttpsUrlConnection() { HttpsURLConnection conn = null; try { /* Creating a trust manager that does not validate certificate chains */ TrustManager[] trustAllCertificatesManager = new TrustManager[]{new X509TrustManager(){ public X509Certificate[] getAcceptedIssuers(){return null;} public void checkClientTrusted(X509Certificate[] certs, String authType){} public void checkServerTrusted(X509Certificate[] certs, String authType){} }}; /* Initialize the SSLContext with the all-trusting trust manager */ SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, trustAllCertificatesManager, new SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory()); URL url = new URL(server_url); conn = (HttpsURLConnection) url.openConnection(); /* Do not perform an actual hostname verification during SSL Handshake. Let all hostname pass through as verified.*/ conn.setHostnameVerifier(new HostnameVerifier() { public boolean verify(String host, SSLSession session) { return true; } }); } catch (Exception e) { e.printStackTrace(); } return conn; } /* * * This forms the Base64 encoded string using the username and password * * provided by the user. This is required for HTTP Basic Authentication. */ private static String getAuthorizationString() { String userPassword = user + ":" + password; byte[] authEncodedBytes = Base64.encodeBase64(userPassword.getBytes()); String authString = new String(authEncodedBytes); return authString; } }