OVH - 如何使用 API 订购任何服务器?答案在这里!
首先,我要问你
这个过程是可以自动化的。我将编写相关的操作方法,教你如何进行。恳请你!不要滥用它!请保留订购限量版服务器的机会给其他人!
OVH API 如何运作?
首先,OVH 提供了 API 库来访问 API。为此,他们还提供了一个 API 控制台,你可以在上面进行尝试。目前,我们将查看 API 控制台。我们将下单一个较旧的服务器。开始吧!
实践操作
登录到 API
我将在 IE 区域为你演示步骤。如果需要,可以切换区域。
如果你还没有 OVHcloud 账户,请先在 OVHcloud 上创建一个账户,并登录 ovh.com/manager。
访问 API 控制台并在 这里授权自己。
获取服务器信息
首先,在下单之前,我们有两个重要部分:服务器目录和可用性。
在目录中,OVH 存储了价格、带宽、HDD、SSD、RAM 选项、承诺期限信息等。
在可用性 API 中,你可以查看特定配置的可用性。例如,如果我们有一个服务器,提供 16 GB 和 32 GB RAM 选项,以及 2 TB HDD 和 450 GB NVMe,这实际上是四种不同的选项。因此,planCode 相同,而 FQN 用于识别所需的配置。
不够清楚?没问题,稍后会更清楚!
检查可用性
最好从可用性 API 开始,链接在 这里。
不需要授权。如果你获取它,你会看到一个包含多个项的数组。fqn 用于识别单个配置,planCode 用于识别组。例如,KS-1 的 planCode 是 24sk10,FQN 指定了 RAM 和 SSD 选项。这里网络不重要,因为它是动态可配置的。
选择一个符合你需求的服务器。例如,我想购买 KS-1。
KS-1 的 planCode 是 24sk10,FQN 是 24sk10.ram-32g-ecc-2133.softraid-2x480ssd。
很好,记下它!
在目录中检查
现在,你需要在目录中搜索 planCode。不要搜索 FQN!FQN 用于识别配置。但在目录中,我们只能找到包含所有可用选项的 planCode。对于 KS-1,它是 32 GB RAM,以及 2x2 TB HDD 或 2x480 GB SSD。
前往 获取 ECO 目录。
并获取它。
目录中的数据量非常大,所以我建议填写子公司并使用 cURL 命令。对于 IE:
curl -X GET "https://eu.api.ovh.com/v1/order/catalog/public/eco?ovhSubsidiary=IE"
如我所提到,数据量很大。所以我建议下载到一个 JSON 文件
curl -o catalog.json -X GET "https://eu.api.ovh.com/v1/order/catalog/public/eco?ovhSubsidiary=IE"
然后在 VsCode 或者记事本中打开它。要在记事本中阅读,建议使用 Perl 的 json_pp 命令将其格式化以便更易读。
cat catalog.json | json_pp > formatted.json
搜索我们需要的机器!
我们注意到我们要搜索的是带有 480 GB SSD、32 GB RAM 和 300 Mbps 公共网络的 KS-1。
首先,查找服务器。我们可以在 plans
数组中找到它。但更容易在文件中搜索这一行 "planCode" : "24sk10"
。
我们将在数组的末尾,因此向上滚动直到开始。如果我们在数组的末尾,搜索 "addonFamilies" : [
的前一个出现。如果找到了,我们就在它的开头。所以看看!
{
"addons" : [
"softraid-2x480ssd-24sk10",
"softraid-2x2000sa-24sk10"
],
"default" : "softraid-2x2000sa-24sk10",
"exclusive" : true,
"mandatory" : true,
"name" : "storage"
},
{
"addons" : [
"ram-32g-ecc-2133-24sk10"
],
"default" : "ram-32g-ecc-2133-24sk10",
"exclusive" : true,
"mandatory" : true,
"name" : "memory"
}
{
"addons" : [
"bandwidth-300-24sk"
],
"default" : "bandwidth-300-24sk",
"exclusive" : true,
"mandatory" : true,
"name" : "bandwidth"
}
我们在这里看到了什么?这里是所选配置的 addons。对于强制性的 addons(网络、磁盘、RAM),你需要只选择一个来完成订单,并记录下如这里所示的 planCodes。
softraid-2x480ssd-24sk10
ram-32g-ecc-2133-24sk10
bandwidth-300-24sk
Default 表示此值的默认选项。可能是如果你不在购物车中放置任何网络、磁盘或 RAM 时的默认设置,但要避免这种情况。请手动选择所有强制选项!
如果配置有更多的 RAM 选项(例如 KS-2,或者更多的网络选项,例如 SYS-1),你会看到更长的数组。JSON 中的数组用 []
表示。
我们需要记下服务器的标签。
"configurations" : [
{
"isCustom" : false,
"isMandatory" : false,
"name" : "dedicated_datacenter",
"values" : [
"gra",
"sbg",
"rbx",
"bhs",
"waw",
"fra",
"lon"
]
},
{
"isCustom" : false,
"isMandatory" : true,
"name" : "dedicated_os",
"values" : [
"none_64.en"
]
},
{
"isCustom" : false,
"isMandatory" : true,
"name" : "region",
"values" : [
"europe",
"canada"
]
}
你需要为每一项只选择一个。例如:
dedicated_os: none_64.en
region: europe
dedicated_datacenter: gra
记下正确的 DC 和区域。DC 选项是服务器可以出现的所有数据中心。而可用性 API 显示了实际的可用性。所以有可能在任何地方或所有地方都不可用。
我对 dedicated_os 了解不多,但它正确地表示平台(x86_64)。
此服务器的价格在 invoiceName 之后可以看到。你可以看到租赁时间、设置费等。
注意:将价格除以 100000000 以查看正确的数字。
查看 addons 详情
我们选择了 BW、RAM 和磁盘。此外,对于 Rise,我们还需要选择 vRack 选项。
因此,查看所选 addons 的价格非常重要。在 catalog.json 中查找所选磁盘的 addon。
"invoiceName" : "2x 480Gb SSD Soft RAID",
"planCode" : "softraid-2x480ssd-24sk10",
查找价格。RAM 和带宽也是如此。
执行订单流程
准备你的购物车
前往 Post cart。
并创建你的订单购物车。最好将过期时间修改为一两个小时后,以获得足够的时间来填写你的购物车。
点击“尝试”按钮并查看响应。
{
"cartId": "XXX",
"description": "string",
"expire": "2024-11-05T17:29:13+00:00",
"readOnly": false,
"items": []
}
记下你的 cartId。
将购物车绑定到你的账户
前往 assign,填写购物车 ID 并点击“尝试”按钮,将其绑定到你的账户。
将服务器添加到购物车
前往 POST eco。
并添加服务器。
设置 cartId 和请求体。请求体如下:
{
"duration": "P1M",
"planCode": "24sk10",
"pricingMode": "default",
"quantity": 1
}
详细看看!
三个重要字段是 duration、planCode 和 qty。我认为 qty 不难理解,不过 planCode 是服务器的 planCode,租赁期限是我们想要订购的时长。目录中对此有选项,对于 ECO,没有更长期合同的扣减,因此简单使用 1 个月(P1M)。
点击“尝试”提交!
响应:
{
"cartId": "",
"configurations": [],
"duration": "P1M",
"itemId": 263---,
"offerId": null,
"options": [],
"prices": [
{
"label": "TOTAL",
"price": {
"currencyCode": "EUR",
"priceInUcents": 1699000000,
"text": "€ 16.99",
"value": 16.99
}
}
],
"productId": "eco",
"settings": {
"planCode": "24sk10",
"pricingMode": "default",
"quantity": 1
}
}
记下 ID,它将用于存储 addons!
将 addons 添加到服务器
访问 POST eco options。
并填写 cartID 和请求体。对于请求体,你需要使用三个不同的 planCodes 分别执行三次。只需粘贴或编辑它,然后点击“尝试”按钮。
{
"duration": "P1M",
"itemId": 261---,
"planCode": "ram-32g-ecc-2133-24sk10",
"pricingMode": "default",
"quantity": 1
}
{
"duration": "P1M",
"itemId": 261---,
"planCode": "softraid-2x480ssd-24sk10",
"pricingMode": "default",
"quantity": 1
}
{
"duration": "P1M",
"itemId": 261---,
"planCode": "bandwidth-300-24sk",
"pricingMode": "default",
"quantity": 1
}
你会收到不同的响应,显示附加价格和更多信息。
添加标签
要完成订单,你需要填写三个标签(前面提到过)。
前往 POST configuration。
并填写 cartID 和 itemID(之前记下的)。
与前一步骤类似,执行三次。填写、尝试、填写、尝试,最后一次填写并尝试。
{
"label": "dedicated_datacenter",
"value": "gra"
}
{
"label": "region",
"value": "europe"
}
{
"label": "dedicated_os",
"value": "none_64.en"
}
你得到了三个 200 响应吗?很好,我们接近完成了!
验证订单
你可以在 这里 验证你的订单。
填写 cartId 并查看。
"details": [
{
"cartItemID": 263---7,
"description": "300Mbps unmetered public bandwidth rental - 1 month",
"detailType": "DURATION",
"domain": "*001.003",
"originalTotalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"quantity": 1,
"reductionTotalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"reductions": [],
"totalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"unitPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
}
},
{
"cartItemID": 263---7,
"description": "300Mbps unmetered public bandwidth",
"detailType": "INSTALLATION",
"domain": "*001.003",
"originalTotalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"quantity": 1,
"reductionTotalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"reductions": [],
"totalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"unitPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
}
},
{
"cartItemID": 263---6,
"description": "2x 2TB HDD Soft RAID rental - 1 month",
"detailType": "DURATION",
"domain": "*001.001",
"originalTotalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"quantity": 1,
"reductionTotalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"reductions": [],
"totalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"unitPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
}
},
{
"cartItemID": 263---5,
"description": "32GB DDR4 ECC 2133MHz rental - 1 month",
"detailType": "DURATION",
"domain": "*001.002",
"originalTotalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"quantity": 1,
"reductionTotalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"reductions": [],
"totalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"unitPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
}
},
{
"cartItemID": 263---1,
"description": "KS-1 | Intel Xeon-D 1520 rental - datacenter bhs - ",
"detailType": "INSTALLATION",
"domain": "*001",
"originalTotalPrice": {
"currencyCode": "EUR",
"text": "€ 16.99",
"value": 16.99
},
"quantity": 1,
"reductionTotalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"reductions": [],
"totalPrice": {
"currencyCode": "EUR",
"text": "€ 16.99",
"value": 16.99
},
"unitPrice": {
"currencyCode": "EUR",
"text": "€ 16.99",
"value": 16.99
}
},
{
"cartItemID": 263---,
"description": "KS-1 | Intel Xeon-D 1520 rental - datacenter bhs - 1 month",
"detailType": "DURATION",
"domain": "*001",
"originalTotalPrice": {
"currencyCode": "EUR",
"text": "€ 16.99",
"value": 16.99
},
"quantity": 1,
"reductionTotalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"reductions": [],
"totalPrice": {
"currencyCode": "EUR",
"text": "€ 16.99",
"value": 16.99
},
"unitPrice": {
"currencyCode": "EUR",
"text": "€ 16.99",
"value": 16.99
}
},
{
"cartItemID": 263039371,
"description": "Intel Xeon-D 1520",
"detailType": "INSTALLATION",
"domain": "*001",
"originalTotalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"quantity": 1,
"reductionTotalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"reductions": [],
"totalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"unitPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
}
}
],
"orderId": null,
"prices": {
"originalWithoutTax": {
"currencyCode": "EUR",
"text": "€ 33.98",
"value": 33.98
},
"reduction": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"tax": {
"currencyCode": "EUR",
"text": "€ 9.17",
"value": 9.17
},
"withTax": {
"currencyCode": "EUR",
"text": "€ 43.15",
"value": 43.15
},
"withoutTax": {
"currencyCode": "EUR",
"text": "€ 33.98",
"value": 33.98
}
},
"url": null
}
完成订单
我们到了最后一步。
前往 POST order。
{
"autoPayWithPreferredPaymentMethod": false,
"waiveRetractationPeriod": false
}
填写,如果你想自动支付或取消订单后的等待时间,然后点击“尝试”按钮。
对于这一部分,我没有响应,因为我没有购买 KS-1。
更新:我成功购买了 KS-LE-B,所以这是此 POST 请求的输出。正如你所见,与 GET checkout 版本几乎相同。在响应的前半部分有 ToS 和其他法律数据,我将其删除,因此这是响应中有趣的部分。
{
"details": [
{
"cartItemID": 262---38,
"description": "300Mbps unmetered public bandwidth rental - 1 month",
"detailType": "DURATION",
"domain": "*001.001",
"originalTotalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"quantity": 1,
"reductionTotalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"reductions": [],
"totalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"unitPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
}
},
{
"cartItemID": 262--38,
"description": "300Mbps unmetered public bandwidth",
"detailType": "INSTALLATION",
"domain": "*001.001",
"originalTotalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"quantity": 1,
"reductionTotalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"reductions": [],
"totalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"unitPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
}
},
{
"cartItemID": 262--37,
"description": "2x 450Gb SSD NVMe Soft RAID rental - 1 month",
"detailType": "DURATION",
"domain": "*001.002",
"originalTotalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"quantity": 1,
"reductionTotalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"reductions": [],
"totalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"unitPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
}
},
{
"cartItemID": 262--39,
"description": "32GB DDR4 ECC 2400MHz rental - 1 month",
"detailType": "DURATION",
"domain": "*001.003",
"originalTotalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"quantity": 1,
"reductionTotalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"reductions": [],
"totalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"unitPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
}
},
{
"cartItemID": 262--36,
"description": "KS-LE-B rental - datacenter gra - ",
"detailType": "INSTALLATION",
"domain": "*001",
"originalTotalPrice": {
"currencyCode": "EUR",
"text": "€ 9.99",
"value": 9.99
},
"quantity": 1,
"reductionTotalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"reductions": [],
"totalPrice": {
"currencyCode": "EUR",
"text": "€ 9.99",
"value": 9.99
},
"unitPrice": {
"currencyCode": "EUR",
"text": "€ 9.99",
"value": 9.99
}
},
{
"cartItemID": 262--36,
"description": "KS-LE-B rental - datacenter gra - 1 month",
"detailType": "DURATION",
"domain": "*001",
"originalTotalPrice": {
"currencyCode": "EUR",
"text": "€ 9.99",
"value": 9.99
},
"quantity": 1,
"reductionTotalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"reductions": [],
"totalPrice": {
"currencyCode": "EUR",
"text": "€ 9.99",
"value": 9.99
},
"unitPrice": {
"currencyCode": "EUR",
"text": "€ 9.99",
"value": 9.99
}
},
{
"cartItemID": 262--36,
"description": "Intel Xeon E3-1245v5",
"detailType": "INSTALLATION",
"domain": "*001",
"originalTotalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"quantity": 1,
"reductionTotalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"reductions": [],
"totalPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"unitPrice": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
}
}
],
"orderId": ---,
"prices": {
"originalWithoutTax": {
"currencyCode": "EUR",
"text": "€ 19.98",
"value": 19.98
},
"reduction": {
"currencyCode": "EUR",
"text": "€ 0.00",
"value": 0
},
"tax": {
"currencyCode": "EUR",
"text": "€ 5.39",
"value": 5.39
},
"withTax": {
"currencyCode": "EUR",
"text": "€ 25.37",
"value": 25.37
},
"withoutTax": {
"currencyCode": "EUR",
"text": "€ 19.98",
"value": 19.98
}
},
"url": "https://www.ovh.ie/cgi-bin/order/display-order.cgi?orderId="
}
你可以看到 HDD 和 BHS DC。原因是当我完成本教程时,这是目前唯一有库存的版本。
如果所需 DC 中没有库存,你会收到错误响应。
错误消息
有时你会收到来自 API 的错误消息。它总是有适当的错误代码(4xx),并在响应体中有请求类和响应文本。
当你使用任何包装器时(例如 python-ovh),你可以捕捉到这种类型的异常。错误消息会通知你,但有时可能不够正式。
附注
- 我对使用本描述所产生的任何责任概不负责,你应自行承担使用此说明的风险!
- 我尽力以我最好的知识来编写它,然而我知道我和我的教程总是可以改进的。欢迎你给我任何反馈或表示感谢!
祝你使用愉快!
哦,对了,在 LET 上,你可以找到我,用户名是 adns
译文结束