Digi-Key API 产品有一些共同原则,其中包括:
OAuth
Digi-Key API 实现了 OAuth 2.0 授权框架。Oauth2 框架是让第三方应用程序对受保护资源进行安全委托访问的行业标准方法。对 DK API 的每个请求都将需要访问令牌。
您需要熟悉 OAuth 2.0 及其如何使用授权码授予流程、授权端点、令牌端点、重定向端点、承载令牌和刷新令牌。授权码授予流程是唯一能访问 DK API 的方式。
TLS
为了保护双方的资源,所有 HTTP 流量皆使用 TLSv1.2 加密协议进行保护。客户端应用程序需按照使用 TLSv1.2 来开发。访问 DK 资源时,请验证端点并且端点使用 TLS。
访问控制
为了保护双方的资源,客户端应用程序的客户端 ID 和客户端密钥必须保持私有和安全。第三方应用程序会被分配一个客户端 ID 和客户端密钥。客户端 ID 和客户端密钥对于第三方应用程序是唯一的。ID 和密钥应加以保护,绝不能公开。
速率限制
DK API 产品具有速率配额。 根据产品级别应用速率限制。在产品级别,应用程序既有每分钟请求数的速率限制,也有每天请求数的限制。
以下速率限制适用于标准产品。
标准产品 | 每分钟速率限制 | 每天速率限制 |
---|---|---|
条形码 | 每分钟 120 次 | 每天 1000 次 |
创建 BOM | 每分钟 10 次 | -- |
订单支持 | 每分钟 120 次 | 每天 1000 次 |
订购 | 每分钟 10 次 | -- |
产品信息 | 每分钟 120 次 | 每天 1000 次 |
报价 | 每分钟 10 次 | -- |
每个 API 响应都伴随着以下一组响应报头,以确定您的客户端应用程序的使用状态。
报头 | 描述 |
---|---|
X-RateLimit-Limit | 允许客户每天发出的最大请求数量。 |
X-RateLimit-Remaining | 当前速率限制窗口中剩余的请求数量。 |
一旦应用程序达到速率限制窗口,该客户端应用程序就会收到一个状态码:
429 请求过多
如果超出触发限值窗口,响应报头将显示:
报头 | 描述 |
---|---|
Retry-After | 再次请求前需等待的秒数 |
X-BurstLimit-Limit | API 允许的最大请求数,用“每分钟次数”表示 |
X-BurstLimit-Remaining | 当前速率限制窗口中剩余的请求数量。 |
X-BurstLimit-Reset | 等待触发限制窗口重置的秒数 |
X-BurstLimit-ResetTime | 触发限制窗口重置时的时间,用 GMT(格林威治标准时间)表示 |
此外,JSON 响应消息类似如下:
{ "ErrorResponseVersion": "3.0.0.0", "StatusCode": 429, "ErrorMessage": "BurstLimit exceeded", "ErrorDetails": "Please try again after the number of seconds in the Retry-After header", "RequestId": "fa3e4d88-bfc4-4565-c6d5-a567633c091b", "ValidationErrors": [] }
如果超出每天限值窗口,响应报头将显示:
报头 | 描述 |
---|---|
Retry-After | 再次请求前需等待的秒数 |
X-RateLimit-Limit | API 允许的最大请求数量 |
X-RateLimit-Remaining | 当前速率限制窗口中剩余的请求数量。 |
X-RateLimit-Reset | 等待已超速率限制窗口重置的秒数 |
X-RateLimit-ResetTime | 速率限制窗口重置的时间,用 GMT(格林威治标准时间)表示 |
此外,JSON 响应消息类似如下:
{ "ErrorResponseVersion": "3.0.0.0", "StatusCode": 429, "ErrorMessage": "Daily Ratelimit exceeded", "ErrorDetails": "Please try again after the number of seconds in the Retry-After header", "RequestId": "f4a0c1ab-8b47-4a72-e010-8ebe5d78f96c", "ValidationErrors": [] }
状态代码
每个 API 都会记录待发送的状态代码。返回的响应代码遵循 RFC 22616 规范。返回的状态代码一般为:
HTTP 状态代码 | 描述 |
---|---|
200 OK | 成功。 |
400 错误请求 | 输入参数错误。 错误消息应指明哪一个以及原因。 不知何故,您的客户端请求格式错误/无效。 也可能是请求的零件未找到,但这种可能性极小。 |
401 未授权 | 客户端传入无效访问令牌。 客户端应刷新此令牌,然后重试。 或者您还没有将客户端应用订阅至 DK API 产品。 |
404 未发现 | 资源未找到。 |
405 方法不允许 | 资源不支持指定的 HTTP 动词。 您提交的请求使用了非预期格式。 例如,当需要以 POST 方式提供数据时,提交的却是 GET 请求。 |
429 请求过多 | 请求次数过多,超出速率限制。在特定时间内请求数量过多(>120 /分钟),或超过当前速率限制窗口允许的值。 |
500 内部服务器错误 | 服务器未按预期运行。 请求可能有效,但需要稍后重新请求。 |
503 服务不可用 | 服务不可用。 |
支持
有关访问或使用 DK API 的技术问题,请访问支持页面。
开发者
开发者可注册客户端应用程序来访问 DK API 解决方案。 开发者要注册应用程序,必须在 https://developer.digikey.com 上创建 DK API 解决方案账户。
成功注册后,开发者将登录到开发者门户。登录成功即会在导航栏显示开发者名称:
选择开发者名称下拉列表,即可看到开发者现在已经能够访问沙盒,并且可以创建沙盒应用程序。
沙盒
沙盒应该是一种安全的测试方法,能够针对 API 对客户端应用程序开发进行测试。此时 API 会提供有效的数据响应结构,但不会实际发出生产请求。虽然从沙盒 API 返回的数据可能不完整,但沙盒 API 响应的结构将代表生产中的预期结果。沙盒是开发者可以访问的第一个环境。
沙盒的目的是测试您的代码与 Digi-Key API的通信能力(授权和认证)。 收到的响应会具有正确的数据结构,但数据本身可能与您的请求不匹配。
当您确认您有能力与我们的 API 通信后,建议您切换到生产版本。
沙盒应用程序
开发者创建沙盒应用程序。沙盒应用程序仅可供其创建者使用。沙盒应用程序不能共享。
注册沙盒应用程序
首先选择开发者名称下的下拉菜单,然后选择“应用程序”:
单击“创建沙盒应用程序”按钮:
使用您的具体应用程序信息填写表单,然后单击“添加沙盒应用程序”按钮:
沙盒应用程序已创建:
查看沙盒应用程序属性
要查看应用程序属性,请单击应用程序名称。要编辑应用程序,请单击“编辑”链接。
这里既能看到开发者为应用程序定义的属性,也能看到给应用程序注册的一组凭证:
选择“编辑”选项卡,您可以编辑开发者定义的应用程序属性。
删除应用程序
在“我的沙盒应用程序”页面上可以删除应用程序:
或在查看应用程序属性页面时单击“删除”选项卡:
网站会要求您输入并提交指定字符串,以确认您想要删除该应用程序:
该应用程序即被删除:
组织
要实现对 Digi-Key API 的生产调用,开发者必须创建一个组织或者是某个组织的成员。一个组织可以有一个或多个成员。组织应邀请其共同开发者加入其创建的组织。同时可指定组织的一个或多个成员为组织管理员。组织管理员角色可以选定成员来管理其组织的用户和应用程序。
公司应使用其公司的注册名称或域名地址创建一个组织。
生产
组织创建生产应用程序。 生产应用程序向生产 API 发出请求。
生产应用程序
生产应用程序向我们的生产 API 与后端服务发送并从其接收数据流量。生产是客户端应用程序的“实时”环境。生产应用程序由组织创建。
一个组织创建的所有应用程序都是生产应用程序。组织的应用程序在组织成员之间共享。
注册组织应用程序
如前所述,要创建组织应用程序,您必须已经创建了一个组织,或者被添加到一个组织而成为其成员。
单击导航栏上的“组织”启动注册:
然后选择“操作”下面的“生产应用程序”:
单击“创建生产应用程序”按钮:
使用您的具体应用程序信息填写表单,然后单击“添加生产应用程序”按钮:
生产应用程序已创建:
这里既能看到开发者为应用程序定义的属性,也能看到给应用程序注册的一组凭证:
选择“编辑”选项卡,您可以编辑开发者定义的应用程序属性。 选择“删除”选项卡,您可以开始删除应用程序。
删除应用程序
应用程序可以从“生产应用程序”页面进行删除:
或在查看应用程序属性页面时单击“删除”选项卡:
网站会要求您输入并提交指定字符串,以确认您想要删除该应用程序:
该应用程序即被删除:
组织管理员角色
组织管理员角色管理组织的成员。担任此角色的成员享有组织中其他开发者的权限。 组织管理员还可以将管理员角色指定给其他开发者。
向组织添加成员
将新成员添加到组织之前,受邀者必须已经是开发者门户上的注册用户。只有担任“组织管理员”角色的成员才能将其他开发者添加到组织中。
单击“成员”页面上的“添加成员”按钮,组织管理员便可将成员添加到其组织中:
首先在以下表单中填入所要添加的开发者的电子邮件地址,然后确定其是否应担任“组织管理员”角色:
该开发者已被添加到组织中:
从组织中删除成员
要删除成员,单击成员名称所在行最右侧的“删除”链接即可将其删除:
然后通过单击“确认”来确认删除成员:
该成员已从组织中删除:
2 Legged Authorization
Basic Steps
All client applications, both Sandbox and Production, follow a basic pattern when making requests to a DigiKey API with the OAuth 2.0 framework.
At a high level, there are three steps:
Register an Application
When you register an application, it will be provisioned an OAuth2 client ID and client secret. Copy and secure this information for your client application.
Get an access token
Get an access token by sending the client id, client secret, and grant type to the authorization server’s token endpoint. You will receive an access token.
Send the access token to an API
By passing the access token with a request header, the client application can now make requests to the DK API it is subscribed to. When the access token expires, a new request must be made.
Sandbox Application
Contained below is the necessary information to complete the 2 legged OAuth process for Sandbox Applications. Before continuing, please confirm that a client application is registered, its client id and client secret are stored and secured, and its subscribed to a Sandbox API Product.
Getting the Access Token
Sandbox Access Token Endpoint | Description |
---|---|
https://sandbox-api.digikey.com/v1/oauth2/token | This endpoint is the target of the request. The result of requests to this endpoint is the access token. |
The request for an access token is an HTTPS POST request and must include the following x-www-form-urlencoded data:
Parameter | Description |
---|---|
client_id | This is the client id assigned to the application that you generated within the API Portal. |
client_secret | This is the client secret assigned to the application that you generated within the API Portal. |
grant_type | As defined in the OAuth 2.0 specification, this field must contain the value client_credentials. |
An example of an access token POST request (this is not query parameter):
POST /v1/oauth2/token HTTP/1.1
Host: sandbox-api.digikey.com
Content-Type: application/x-www-form-urlencoded
code=lboI52TG& client_id=application_client_id&
client_secret=application_client_secret& grant_type= client_credentials
A successful response to this request contains the following fields:
Field | Description |
---|---|
access_token | The token sent to access a Digi-Key API. |
expires_in | The remaining lifetime of the access token, in seconds. |
token_type | The token type being returned. |
A successful response is returned as a JSON object.
Example response to a successful access token request:
{ "access_token": "SLKDosk89/DOSID-frt3234SLsofds"
"expires_in": 599, "token_type": "BearerToken", }
Note: Other fields may be included in the response, and your application should not treat this as an error. The set shown above is the minimum set.
Production Application
Contained below is the necessary information to complete the OAuth process for Production Applications. Before continuing please confirm that a client application is registered, its client id and client secret are stored and secured, and its subscribed to a Production API Product.
Getting the Access Token
The URL used to get your token is:
Production Access Token Endpoint | Description |
---|---|
https://api.digikey.com/v1/oauth2/token | This endpoint is the target of the request. The result of requests to this endpoint is the access token |
The request for an access token is an HTTPS POST request and must include the following x-www-form-urlencoded data:
Field | Description |
---|---|
client_id | The client id assigned to the registered application. |
client_secret | The client secret assigned to the registered application. |
grant_type | As defined in the OAuth 2.0 specification, this field must contain the value client_credentials |
An example of an access token POST request (this is not query parameter):
POST /v1/oauth2/token HTTP/1.1
Host: api.digikey.com
Content-Type: application/x-www-form-urlencoded
code=lboI52TG& client_id={application_client_id}&
client_secret={application_client_secret}& grant_type=client_credentials
Field | Description |
---|---|
access_token | The token sent to access a DigiKey API. |
expires_in | The remaining lifetime of the access token, in seconds. |
token_type | The token type being returned. |
A successful response to this request contains these fields:
A successful response is returned as a JSON object.
Example response to a successful access token request:
{ "access_token": "SLKDosk89/DOSID-frt3234SLsofds",
"expires_in": 599, "token_type": "Bearer", }
Note: Other fields may be included in the response, and your application should not treat this as an error. The set shown above is the minimum set.
Token Expiration Time
Type | Expires in |
---|---|
Access Token | 10 minutes |
Making an API Call
With OAuth completed the application can send a request.
Developer application example request (Sandbox)
Example request to ProductSearch using developer credentials and endpoint (sandbox-api.digikey.com) :
GET /products/v4/search/P5555-ND/productdetails HTTP/1.1
Host: sandbox-api.digikey.com
X-DIGIKEY-Client-Id: WugAd2A6Lxy3Eu3Mgvov45KUNoguMoUl
Authorization: Bearer StgGLw9b3hkwqlWAGBmdYoBNEokm
X-DIGIKEY-Locale-Site: US
X-DIGIKEY-Locale-Language: en
X-DIGIKEY-Locale-Currency: USD
X-DIGIKEY-Customer-Id: 0
Organization application example request (Production)
Example request to ProductSearch using organization credentials and endpoint (api.digikey.com):
GET /products/v4/search/P5555-ND/productdetailsHTTP/1.1
Host: api.digikey.com
X-DIGIKEY-Client-Id: heWGx9w6DK8kZf3jRv5E9jUAhXrGBU67
Authorization: Bearer s4T5DbmFZadjNRAEbUnN9zkU3DBj
X-DIGIKEY-Locale-Site: US
X-DIGIKEY-Locale-Language: en
X-DIGIKEY-Locale-Currency: USD
X-DIGIKEY-Customer-Id: 0
The Value of the Authorization header is prefixed with "Bearer"
e.g.: "Authorization": "Bearer xGr69sdAjLmnAHwGF4R1HedfDHl3j"
The value "Bearer" must be sent with the BearerToken or else you will get a Bearer token error.
"Authorization":"Bearer <BearerToken>"
验证与授权
OAuth 和 Digi-Key API 概述
当客户端应用程序将浏览器重定向到 Digi-Key URL 时,授权序列开始。
该 URL 包含指明所请求访问类型的查询参数。
Digi-Key 的授权服务器负责处理用户验证和用户准许。 在验证过程中,使用的是最终用户的“我的 Digi-Key”用户名和密码(而不是开发者的用户名和密码)。
结果返回一个授权码,是由 Digi-Key 的授权服务器以查询字符串的形式返回到您的应用程序的。
客户端应用程序在收到授权码后,可以将该代码(用应用程序的客户端 ID 和客户端密钥进行请求)交换成访问令牌和刷新令牌。
然后,客户端应用程序可以使用访问令牌访问它已订阅的 Digi-Key API。
刷新令牌可用于随时获取新的访问令牌。 这就是所谓的离线访问,因为当应用程序获取新的访问令牌时,用户不必在场。
基本步骤
所有客户端应用程序,同时包括沙盒和生产环境,在使用 OAuth 2.0 框架向 Digi-Key API 发出请求时,都会遵循一基本模式。
总体来说,有四步:
创建应用程序
当您创建应用程序时,将被提供一个 OAuth2 客户端 ID 和客户端密钥。 复制该信息并确保其安全,以备您的客户端应用程序将来使用。
获取授权码并授予应用程序访问权
通过让用户登录自己的 Digi-Key 账户自行进行身份验证,从而获得授权码。 登录后,系统会要求用户对请求的应用程序进行授权。 授权会给应用程序授予对 Digi-Key 账户的访问权。 如果用户授予权限,Digi-Key 的授权服务器就会向应用程序发送一个授权码。 如果用户没有授予权限,授权服务器就会返回一个错误。
获取访问令牌
通过向授权服务器的令牌端点发送授权码、客户端 ID、客户端密钥和授予类型来获取访问令牌。 您将收到一个访问令牌和一个刷新令牌。
将访问令牌发送至 API
通过传递带有请求报头的访问令牌,客户端应用程序现在可以向其订阅的 DK API 发出请求。当访问令牌过期时,客户端应用程序可以提交存储的刷新令牌来接收新一组凭证。
沙盒应用程序
以下是完成用于沙盒应用程序的 OAuth 进程的必要信息。 在继续前,请确认客户端应用程序已经注册,其客户端 ID 和客户端密钥已被存储和保护,并且订阅了沙盒 API 产品。
获取授权码
用于用户验证的端点,这在浏览器中完成:
沙盒授权端点 | 描述 |
---|---|
https://sandbox-api.digikey.com/v1/oauth2/authorize | 这个端点是初始请求的目标。 它处理用户验证和用户准许。 结果包括授权码。 |
在浏览器中发送 url 编码所需的一组查询参数。
参数 | 值 | 描述 |
---|---|---|
response_type | 编码 | 告诉授权服务器返回一个授权码。 |
client_id | 分配给注册应用程序的客户 ID。 | 识别发出请求的客户端应用程序。 此参数中传递的值必须与分配给它的值完全匹配。 |
redirect_uri | 开发者定义了重定向 URI | 确定响应的发送地点。 这个参数的值必须与您在注册应用程序时提供的 URI 完全匹配(包括后面的 '/')。 |
url 编码的代码请求和所需的查询参数实例:
https://sandbox-api.digikey.com/v1/oauth2/authorize?response_type=code&client_id=123456789abcdefg&redirect_uri=https%3A%2F%2Fclient-app-redirect-uri%2F
在上面的例子中,粗体突出显示了字符的 url 编码。字符 ":" 的 url 编码为 "%3A"。 字符 "/" 的 url 编码为 "%2F"
如浏览器中所见:
处理响应
响应将按照请求 URL 中的指定,发送到重定向 URI。 如果用户批准访问请求,那么响应就会包含一个授权码。 如果用户不批准该请求,则响应会包含一个错误信息。 所有响应都会通过查询字符串返回浏览器,如下所示:
一个错误响应:
https://client-app-redirect-uri/code?error=access_denied
一个授权码响应:
https://client-app-redirect-uri/?code=lboI52TG&scope=&state=null
注意:代码(例如:lboI52TG)在创建后将在一分钟内失效。
获取访问令牌
浏览器收到授权码后,您的应用程序可能会用授权码交换一个访问令牌和一个刷新令牌。 用于获取令牌的 URL 是:
沙盒访问令牌端点 | 描述 |
---|---|
https://sandbox-api.digikey.com/v1/oauth2/token | 这个端点是第二个请求的目标。 对该端点的请求结果包括访问令牌和刷新令牌 |
访问令牌的请求是一个 HTTPS POST 请求,必须包含以下 x-www-form-urlencoded 数据:
参数 | 描述 |
---|---|
编码 | 初始请求返回的授权码。该代码在创建一分钟后失效。 |
client_id | 这是您在 API 入口中生成的分配给应用程序的客户端 ID。 |
client_secret | 这是您在 API 入口中生成的分配给应用程序的客户端密钥。 |
redirect_uri | 确定响应的发送地点。 这个参数的值必须与您在注册应用程序时定义的 URI 完全匹配(包括后面的 '/')。 |
grant_type | 按照 OAuth 2.0 规范的定义,这个字段必须包含值 authorization_code。 |
实际请求可能像下面这样:
POST /v1/oauth2/token HTTP/1.1 Host: sandbox-api.digikey.com Content-Type: application/x-www-form-urlencoded code=lboI52TG& client_id=application_client_id& client_secret=application_client_secret& redirect_uri=https://client-app-redirect-uri& grant_type=authorization_code
对该请求的成功响应包含以下字段:
字段 | 描述 |
---|---|
access_token | 为访问 Digi-Key API 而发送的令牌。 |
refresh_token | 可以为获得新的访问令牌而提交的令牌。 |
expires_in | 访问令牌的剩余寿命,以秒为单位。 |
refresh_token_expires_in | 刷新令牌的剩余寿命,以秒为单位。 |
token_type | 返回的令牌类型。 |
成功响应作为 JSON 对象返回。
成功访问令牌请求的示例响应:
{ "access_token": "SLKDosk89/DOSID-frt3234SLsofds", "refresh_token": "oPu5qu7wPhuVBcTZqmx4NFfhlnSB6hVUJ5uSIhS0CM", "expires_in": 1799, "refresh_token_expires_in": 7775999, "token_type": "BearerToken", }
注意:响应中可能包含其他字段,您的应用程序不应将其视为错误。 上面显示的集合是最小的集合。
使用刷新令牌
如上节所述,当您获得初始访问令牌时,会获得一个刷新令牌。 在这些情况下,您的应用程序可以通过向 Digi-Key 的授权服务器发送刷新令牌来获得新的访问令牌。
为了以这种方式获得新的访问令牌,您的应用程序需要向令牌端点发送一个 HTTPS POST 请求。
https://sandbox-api.digikey.com/v1/oauth2/token
该请求必须包括这组必须的参数:
参数 | 描述 |
---|---|
client_id | 分配给注册应用程序的客户 ID。 |
client_secret | 分配给注册应用程序的客户密钥。 |
refresh_token | 保存下来以备提交的刷新令牌。 |
grant_type | 按照 OAuth 2.0 规范的定义,这个字段必须包含一个 refresh_token 值。 |
这样的请求看起来会类似下面这个样子:
POST /v1/oauth2/token HTTP/1.1 Host: sandbox-api.digikey.com Content-Type: application/x-www-form-urlencoded client_id=application_client_id& client_secret=application_client_secret& refresh_token=123Asfeksodk/jkdsoieDSioIOS-483LidkOOl& grant_type=refresh_token
只要用户没有撤销授予您应用程序的访问权,响应就会提供一组新的令牌。
成功刷新令牌请求的示例响应:
{ "access_token": "SLKDosk89/DOSID-frt3234SLsofds", "refresh_token": "oPu5qu7wPhuVBcTZqmx4NFfhlnSB6hVUJ5uSIhS0CM", "expires_in": 1799, "refresh_token_expires_in": 7775999, "token_type": "BearerToken", }
注意:每次获得新的访问令牌时,刷新令牌都会重新生成。 请务必保存最新的刷新令牌,因为旧的令牌将不再有效。
生产应用程序
以下是完成针对生产应用程序的 OAuth 进程必需的信息。 在继续前,请确认客户端应用程序已经注册,其客户端 ID 和客户端密钥已被存储和保护,并且订阅了生产 API 产品。
获取授权码
用于用户验证的端点,这在浏览器中完成:
生产授权端点 | 描述 |
---|---|
https://api.digikey.com/v1/oauth2/authorize | 这个端点是初始请求的目标。 它处理用户验证和用户准许。 结果包括授权码。 |
在浏览器中发送 url 编码所需的一组查询参数。
参数 | 值 | 描述 |
---|---|---|
response_type | 编码 | 告诉授权服务器返回一个授权码。 |
client_id | 分配给注册应用程序的客户 ID。 | 识别发出请求的客户端。 此参数中传递的值必须与 API 入口分配的值完全匹配。 |
redirect_uri | 开发者定义了重定向 URI | 确定响应的发送地点。 这个参数的值必须与您在注册应用程序时定义的 URI 完全匹配(包括后面的 '/')。 |
url 编码的代码请求和所需的查询参数实例:
https://api.digikey.com/v1/oauth2/authorize?response_type=code&client_id=123456789abcdefg&redirect_uri=https%3A%2F%2Fclient-app-redirect-uri%2
在上面的例子中,粗体突出显示了字符的 url 编码。字符 ":" 的 url 编码为 "%3A"。 字符 "/" 的 url 编码为 "%2F"
如浏览器中所见:
处理响应
响应将按照请求 URL 中的指定,发送到重定向 URI。 如果用户批准访问请求,那么响应就会包含一个授权码。 如果用户不批准该请求,则响应会包含一个错误信息。 所有响应都会通过查询字符串返回浏览器,如下所示:
一个错误响应:
https://client-app-redirect-uri/code?error=access_denied
一个授权码响应:
https://client-app-redirect-uri/code?code=lboI52TG&scope=&state=null
注意:代码(例如:lboI52TG)在创建后将在一分钟内失效。
获取访问令牌
浏览器收到授权码后,您的应用程序可能会用授权码交换一个访问令牌和一个刷新令牌。 用于获取令牌的 URL 是:
生产访问令牌端点 | 描述 |
---|---|
https://api.digikey.com/v1/oauth2/token | 这个端点是第二个请求的目标。 对该端点的请求结果包括访问令牌和刷新令牌 |
访问令牌的请求是一个 HTTPS POST 请求,必须包含以下 x-www-form-urlencoded 数据:
字段 | 描述 |
---|---|
编码 | 初始请求返回的授权码。 该代码在创建一分钟后失效 |
client_id | 分配给注册应用程序的客户 ID。 |
client_secret | 分配给注册应用程序的客户密钥。 |
redirect_uri | 确定响应的发送地点。 这个参数的值必须与您在注册应用程序时定义的 URI 完全匹配(包括后面的 '/')。 |
grant_type | 按照 OAuth 2.0 规范的定义,这个字段必须包含值 authorization_code。 |
一个授权码 POST 请求实例:
POST /v1/oauth2/token HTTP/1.1 Host: api.digikey.com Content-Type: application/x-www-form-urlencoded code=lboI52TG& client_id={application_client_id}& client_secret={application_client_secret}& redirect_uri=https://client-app-redirect-uri& grant_type=authorization_code
对该请求的成功响应包含这些字段:
字段 | 描述 |
---|---|
access_token | 为访问 Digi-Key API 而发送的令牌。 |
refresh_token | 可以为获得新的访问令牌而提交的令牌。 |
expires_in | 访问令牌的剩余寿命,以秒为单位。 |
refresh_token_expires_in | 刷新令牌的剩余寿命,以秒为单位。 |
token_type | 返回的令牌类型。 |
成功响应作为 JSON 对象返回。
成功访问令牌请求的示例响应:
{ "access_token": "SLKDosk89/DOSID-frt3234SLsofds", "refresh_token": "oPu5qu7wPhuVBcTZqmx4NFfhlnSB6hVUJ5uSIhS0CM", "expires_in": 1799, "refresh_token_expires_in": 7775999, "token_type": "BearerToken", }
注意:响应中可能包含其他字段,您的应用程序不应将其视为错误。 上面显示的集合是最小的集合。
使用刷新令牌
如上节所述,当您获得初始访问令牌时,会获得一个刷新令牌。 在这些情况下,您的应用程序可以通过向 Digi-Key 的授权服务器发送刷新令牌来获得新的访问令牌。
为了以这种方式获得新的访问令牌,您的应用程序需要向令牌端点发送一个 HTTPS POST 请求。
https://api.digikey.com/v1/oauth2/token
该请求必须包括这组必须的参数:
字段 | 描述 |
---|---|
client_id | 分配给注册应用程序的客户 ID。 |
client_secret | 分配给注册应用程序的客户密钥。 |
refresh_token | 保存下来以备提交的刷新令牌。 |
grant_type | 按照 OAuth 2.0 规范的定义,这个字段必须包含一个 refresh_token 值。 |
一个刷新令牌 POST 请求实例:
POST /v1/oauth2/token HTTP/1.1 Host: api.digikey.com Content-Type: application/x-www-form-urlencoded client_id={application_client_id}& client_secret={application_client_secret}& refresh_token=123Asfeksodk/jkdsoieDSioIOS-483LidkOOl& grant_type=refresh_token
只要用户没有撤销授予您应用程序的访问权,响应就会提供一组新的令牌。
成功刷新令牌请求的示例响应:
{ "access_token": "SLKDosk89/DOSID-frt3234SLsofds", "refresh_token": "oPu5qu7wPhuVBcTZqmx4NFfhlnSB6hVUJ5uSIhS0CM", "expires_in": 1799, "refresh_token_expires_in": 7775999, "token_type": "BearerToken", }
注意:每次获得新的访问令牌时,刷新令牌都会重新生成。 请务必保存最新的刷新令牌,因为旧的令牌将不再有效。
代码和令牌有效期
所有代码和令牌都有有效期。
类型 | 有效期 |
---|---|
授权码 | 1 分钟 |
访问令牌 | 30 分钟 |
刷新令牌 | 90 天 |
进行 API 调用
OAuth 完成后,应用程序即可发送请求。
开发者应用程序示例请求(沙盒)
使用开发者凭证和端点 (sandbox-api.digikey.com) 向 PartSearch 发出的示例请求:
GET /Search/v3/Products/p5555-nd HTTP/1.1 Host: sandbox-api.digikey.com X-DIGIKEY-Client-Id: WugAd2A6Lxy3Eu3Mgvov45KUNoguMoUl Authorization: Bearer StgGLw9b3hkwqlWAGBmdYoBNEokm X-DIGIKEY-Locale-Site: US X-DIGIKEY-Locale-Language: en X-DIGIKEY-Locale-Currency: USD X-DIGIKEY-Locale-ShipToCountry: us X-DIGIKEY-Customer-Id: 0
组织应用程序示例请求(生产)
使用组织凭证和端点 (api.digikey.com) 向 PartSearch 发出的示例请求:
GET /Search/v3/Products/p5555-nd HTTP/1.1 Host: api.digikey.com X-DIGIKEY-Client-Id: heWGx9w6DK8kZf3jRv5E9jUAhXrGBU67 Authorization: Bearer s4T5DbmFZadjNRAEbUnN9zkU3DBj X-DIGIKEY-Locale-Site: US X-DIGIKEY-Locale-Language: en X-DIGIKEY-Locale-Currency: USD X-DIGIKEY-Locale-ShipToCountry: us X-DIGIKEY-Customer-Id: 0
授权报头的值带有 "Bearer" 前缀
例如:"Authorization": "Bearer xGr69sdAjLmnAHwGF4R1HedfDHl3j"
值 "Bearer" 必须和 BearerToken 一起发送,否则会收到一个Bearer 令牌错误。
"Authorization":"Bearer <BearerToken>"