8 个版本 (破坏性更新)
0.7.0 | 2022年4月29日 |
---|---|
0.6.0 | 2021年11月3日 |
0.5.0 | 2021年11月1日 |
0.4.0 | 2021年10月30日 |
0.1.1 | 2021年10月24日 |
#106 in #env-vars
每月22 次下载
42KB
1K SLoC
netsuite-rs
用于向 NetSuite REST API 发送请求的库。
支持程序化和 CLI 使用(通过 cli
功能)。
当前使用 ureq 进行 HTTP 请求,这意味着此库目前对异步环境没有用。异步功能可能在未来作为功能标志发布。
测试版质量免责声明
项目的 API 仍然非常不稳定。请将依赖项固定到当前次要版本以避免破坏性更改。从 1.0 版本开始,我们将保持稳定的 API。
CLI
这是入门的最简单方式。要了解您可以使用 CLI 做什么,只需将 --help
或 -h
添加到已安装的 netsuite
命令。
请注意,您需要添加 cli
功能才能访问 CLI。使用 cargo-edit,您可以这样做: cargo add netsuite --features cli
配置文件
建议在使用 CLI 之前创建一个 INI 配置文件,以避免在每次执行命令时都提供 OAuth 1.0 的详细信息。
您可以使用 netsuite default-ini-path
来查找默认的 INI 配置位置。
netsuite default-ini-path
将设置写入文件,以下示例使用 heredoc 语法
cat <<EOF >"$(netsuite default-ini-path)"
[sandbox]
account = <account id>_SB1
consumer_key = <64 chars>
consumer_secret = <64 chars>
token_id = <64 chars>
token_secret = <64 chars>
EOF
之后,您只需提供部分名称即可开始使用 CLI
netsuite -s sandbox suiteql 'SELECT * FROM pricing'
环境变量
作为替代方案,您可以直接提供环境变量。例如
export ACCOUNT=<account id>
export CONSUMER_KEY=<64 chars>
export CONSUMER_SECRET=<64 chars>
export TOKEN_ID=<64 chars>
export TOKEN_SECRET=<64 chars>
netsuite suiteql 'SELECT * FROM pricing'
程序化访问
请参阅以下示例了解如何将其集成到您的代码中。
(如果您看到以 # 开头的行,请忽略它们,它们的存在是为了确保提供的 Rust 代码是正确的。)
use netsuite::{Config, RestApi};
#[derive(Debug, PartialEq, serde::Deserialize)]
struct Price {
internalid: String,
unitprice: String,
}
let config = Config::new("123456", "2", "3", "4", "5");
let api = RestApi::new(config);
# use httpmock::{MockServer, Method::POST};
# let server = MockServer::start();
# let api = RestApi::new(Config::new("123456", "2", "3", "4", "5")).with_base_url(server.base_url());;
# let mock = server.mock(|when, then| {
# when.method(POST).path("/query/v1/suiteql");
# then.status(200).body(r#"{"links":[],"count":2,"hasMore":false,"items":[{"links":[],"currency":"1","internalid":"24","item":"24","pricelevel":"15","quantity":"1","saleunit":"1","unitprice":"95.49"},{"links":[],"currency":"1","internalid":"24","item":"24","pricelevel":"21","quantity":"1","saleunit":"1","unitprice":"19.99"}],"offset":0,"totalResults":2}"#);
# });
let res = api.suiteql.fetch_all::<Price>("SELECT * FROM pricing");
# mock.assert();
assert_eq!(res.unwrap(), [Price { internalid: "24".into(), unitprice: "95.49".into() }, Price { internalid: "24".into(), unitprice: "19.99".into() }]);
依赖项
~13–24MB
~452K SLoC