Test de l'API de Smarthands
Ce guide fournit des approches et des exemples de tests spécifiques pour l'API Smarthands d'Equinix, en s'appuyant sur les principes généraux de API Testing.
Aperçu de l'API Smarthands
L'API Smarthands vous permet de demander et de gérer de manière programmatique divers services de mains distantes dans les centres de données IBX d'Equinix.\NVoici le mappage de l'API ECP avec les types de smarthands pris en charge :
Processus de test Smarthands
Avant de tester l'API Smarthands, assurez-vous que vous avez :
- Identifiants API valides avec les permissions appropriées
- Accès aux sites IBX d'Equinix où vous avez du matériel
- Familiarité avec le flux de travail des tickets de service
Créer 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 du statut 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}")
Test des scénarios d'erreur
Testez toujours la gestion des erreurs pour votre mise en œuvre de l'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
Remarque importante: L'API d'Equinix est un système de production qui crée des demandes d'expédition réelles. Suivez toujours ces meilleures pratiques de test pour vous assurer que vous ne créez pas de travail opérationnel involontaire.
- Créez un compte de test dédié: Demandez un compte séparé pour les tests si possible
- Commencez par les opérations en lecture seule: Testez d'abord les points d'extrémité GET avant de créer/modifier des ressources.
- Utilisez des demandes de test clairement identifiées: Faites toujours précéder les descriptions de "TEST :" pour aider les opérateurs à identifier les demandes de test.
- Nettoyez les ressources de test: Annulez tous les envois de test immédiatement après leur création réussie
- Fournissez des détails complets: Fournissez des informations complètes dans vos demandes
- Numéros de suivi: Fournissez toujours des numéros de suivi précis pour les envois entrants afin de garantir un traitement adéquat.
- Informations de contact: Assurez-vous que les informations de contact sont à jour et que la personne est disponible pendant la fenêtre de service prévue.
- Détails de la description: Décrivez vos besoins de manière détaillée mais concise afin d'aider le personnel de l'établissement à répondre efficacement à votre demande.
Considérations sur l'automatisation
Lorsque vous construisez l'automatisation autour de l'API Smarthands :
- Mettez en œuvre une gestion des erreurs et des tentatives appropriées
- Envisagez de mettre en place des récepteurs webhook pour les mises à jour d'état.
- Intégrez la validation des fenêtres temporelles et de la disponibilité des services.
- Incluez l'enregistrement d'audit de toutes les interactions API
- Veillez à ce que les informations de suivi soient automatiquement incluses dans toutes les demandes relatives à l'expédition.
- Validez la disponibilité des contacts pendant les fenêtres de service programmées.