Tests de l'API Smarthands
Ce guide fournit des approches de test spécifiques et des exemples pour l'API Equinix Smarthands, en s'appuyant sur les principes généraux de test d'API.
Aperçu de l'API Smarthands
L'API Smarthands vous permet de demander et de gérer par programmation divers services d'assistance à distance dans les centres de données Equinix IBX. Voici la correspondance entre l'API ECP et les types d'appareils SmartHands pris en charge:
Flux de travail de test Smarthands
Avant de tester l'API Smarthands, assurez-vous d'avoir:
- Identifiants d'API valides avec les autorisations appropriées
- Accès aux emplacements Equinix IBX où se trouve votre équipement
- Connaissance du flux de travail des tickets de service
Création d'une demande de service Smarthands
import requests
import json
# Setup authentication
auth_url = "https://api.equinix.com/oauth2/v1/token"
auth_payload = {
"grant_type": "client_credentials",
"client_id": "YOUR_CLIENT_ID",
"client_secret": "YOUR_CLIENT_SECRET"
}
auth_response = requests.post(auth_url, data=auth_payload)
token = auth_response.json()["access_token"]
# Test creating a Smarthands request
base_url = "https://api.equinix.com/v1"
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
}
# Example: Create a cage escort request
request_payload = {
"customerReferenceNumber": "RSS41244",
"purchaseOrder": {
"number": "123455",
"purchaseOrderType": "EXISTING"
},
"ibxLocation": {
"ibx": "AM1",
"cages": [
{
"cage": "AM1:01:001MC3",
"accountNumber": "12345",
"cabinets": [
"AM1:01:001MC3:0102"
]
}
]
},
"contacts": [
{
"contactType": "ORDERING",
"userName": "jondoe@test.com"
},
{
"contactType": "NOTIFICATION",
"userName": "jondoe@test.com"
},
{
"contactType": "TECHNICAL",
"name": "John Doe",
"workPhone": "1111111",
"workPhonePrefToCall": "ANYTIME",
"mobilePhone": "1111111",
"mobilePhonePrefToCall": "ANYTIME"
}
],
"schedule": {
"scheduleType": "STANDARD",
"requestedStartDate": "2017-04-05T12:00:00Z",
"requestedCompletionDate": "2017-04-05T12:00:00Z"
},
"attachments": [
{
"id": "eb9ab7e9-3785-41e4-af24-112dff",
"name": "eb9ab7e9-3785-41e4-af24-asfsa5424"
}
],
"serviceDetails": {
"durationVisit": "30 Minutes",
"openCabinetForVisitor": false,
"scopeOfWork": "Scope of work",
"supervisionReqForVisitor": false,
"workVisitOrderNumber": "1-108050984499"
}
}
create_response = requests.post(
f"{base_url}/orders/smarthands/cageEscort",
headers=headers,
data=json.dumps(request_payload)
)
# Verify response
assert create_response.status_code == 201, f"Failed to create request: {create_response.text}"
order_number = create_response.json()["OrderNumber"]
print(f"Successfully created Smarthands request with order number: {order_number}")
Vérification de l'état de la demande
# Test retrieving request status
status_response = requests.get(
f"https://api.equinix.com/colocations/v2/orders/{order_number}",
headers=headers
)
assert status_response.status_code == 200, f"Failed to retrieve status: {status_response.text}"
status = status_response.json()["status"]
print(f"Current request status: {status}")
Scénarios d'erreurs de test
Testez toujours la gestion des erreurs de votre implémentation d'API:
# Test with invalid location
invalid_payload = {
"customerReferenceNumber": "RSS41244",
"purchaseOrder": {
"number": "123455",
"purchaseOrderType": "EXISTING"
},
"ibxLocation": {
"ibx": "INVALID", # Invalid IBX code
"cages": [
{
"cage": "INVALID:01:001MC3",
"accountNumber": "12345",
"cabinets": [
"INVALID:01:001MC3:0102"
]
}
]
},
"contacts": [
{
"contactType": "ORDERING",
"userName": "jondoe@test.com"
}
],
"schedule": {
"scheduleType": "STANDARD",
"requestedStartDate": "2025-08-01T10:00:00Z",
"requestedCompletionDate": "2025-08-01T12:00:00Z"
},
"serviceDetails": {
"durationVisit": "30 Minutes",
"openCabinetForVisitor": false,
"scopeOfWork": "Test invalid IBX location",
"supervisionReqForVisitor": false
}
}
error_response = requests.post(
f"{base_url}/orders/smarthands/cageEscort",
headers=headers,
data=json.dumps(invalid_payload)
)
# Verify error response
assert error_response.status_code == 400, f"Expected error but got: {error_response.status_code}"
assert "Invalid IBX location" in error_response.text, "Error message not as expected"
Meilleures pratiques pour les tests d'API Smarthands
Note importante: L'API Equinix est un système de production qui génère de véritables demandes d'expédition. Suivez toujours ces bonnes pratiques de test afin d'éviter toute surcharge opérationnelle imprévue.
- Créer un compte de test dédié: Demandez un compte distinct pour les tests si possible.
- Commencez par des opérations en lecture seule: testez d’abord les points de terminaison GET avant de créer ou de modifier des ressources.
- Utilisez des demandes de test clairement identifiées: Préfixez toujours les descriptions par « TEST: » pour aider les opérateurs à identifier les demandes de test.
- Nettoyage des ressources de test: Annulez immédiatement tout envoi de test après sa création réussie.
- Veuillez inclure tous les détails: Fournissez des renseignements complets dans vos demandes.
- Numéros de suivi: Veuillez toujours fournir des numéros de suivi précis pour les envois entrants afin d’assurer leur bonne prise en charge.
- Coordonnées de contact: Veuillez vous assurer que les coordonnées sont à jour et que la personne est disponible pendant la plage horaire prévue pour le service.
- Détails de la description: Soyez précis mais concis dans votre description afin d’aider le personnel de l’établissement à traiter votre demande efficacement.
Considérations relatives à l'automatisation
Lors de la création d'automatisations autour de l'API Smarthands:
- Mettre en œuvre une gestion appropriée des erreurs et des tentatives de nouvelle tentative
- Envisagez la mise en place de récepteurs de webhook pour les mises à jour de statut.
- Intégrer la validation des plages horaires et de la disponibilité du service
- Inclure la journalisation d'audit de toutes les interactions avec l'API
- S'assurer que les informations de suivi sont automatiquement incluses pour toutes les demandes relatives aux expéditions
- Vérifiez la disponibilité du contact pendant les créneaux horaires de service prévus.