我想知道Netsuite是否提供REST ful api?目前我正在使用基于肥皂的Web服务与我的应用程序(java)进行集成。我已经做了一些研究,但没有获得有用的信息。如果我能在哪里找到api?
答案 0 :(得分:5)
是。这是在Customization / Scripts部分。你会发现" RestLet"那里。 Doc是here。
但是你说你的应用程序是基于soap的,我建议你看看Netsuite的WebServices又称SuiteTalk。
SuiteTalk平台通过基于XML的应用程序编程接口(API)提供对NetSuite数据和业务流程的编程访问。
我认为您确实需要访问您的Netsuite数据,对吗?
您可以下载sample进行测试和学习。
答案 1 :(得分:2)
在NetSuite中,您可以构建RESTlet脚本,以提供基于REST的界面。您基本上可以使用它们来构建自己的JSON API。建议在NetSuite帮助中研究RESTlet。
答案 2 :(得分:2)
这是NetSuite提供的用于集成目的的正确REST API。
https://system.netsuite.com/help/helpcenter/en_US/APIs/REST_API_Browser/record/v1/2020.1/index.html
可以通过基于令牌的身份验证或启用OAuth 2.0的HTTP客户端调用REST API。
首先,您需要登录到NetSuite帐户并启用该帐户的SuiteTalk Web服务功能(设置->公司->启用功能)。
然后获取SuiteTalk基本URL,该URL包含公司URL下的帐户ID(设置->公司->公司信息)。例如,https://
然后使用BaseUrl + API资源路径作为HTTP客户端路径来调用每个记录API。可以通过此REST API完成CRUD,搜索和过滤器之类的操作。有关更多信息,请参见NetSuite Documentation
答案 3 :(得分:1)
SOAP更易于配置和使用,但每个只允许1个连接 Netsuite帐户(您使用登录凭据作为身份验证) 并且相对较慢。
这不太正确,因为您可以使用套件云加上程序来扩展它。检查帮助: - 了解Web服务治理 - 使用SuiteCloud Plus启用Web服务并发用户
答案 4 :(得分:1)
不惜一切代价避免使用SuiteTalk SOAP Web服务API;它只不过是浪费时间而已,您会发现这不是一个可行的选择。如果可以的话,可以使用Netsuite SOAP API,如果您认为SOAP API的性能不佳,不介意与总体交互以使用有问题的SOAP API,有足够的时间来实现对随机SOAP错误,并发错误的强大错误处理,以及还愿意开发强大的容错能力并完全忽略SOAP API性能问题(它根本无法在合理的时间内获取数据,甚至对于每日或定期导入也不可行)。
与SOAP API相比,RESTlet在写入数据方面更受青睐; RESTlet的写入性能往往更高(尽管响应仍然非常慢,并且不适合面向客户的应用程序。)
RESTlet是将数据写入Netsuite的可行的短期解决方案,它使您可以使用类似于真实Rest API的JSON请求正文和响应正文。在不需要通过Restlet写入大量数据的情况下,使用特别可行。具有失败请求重试容错能力的基于队列的系统和后台作业效果很好。
如果您必须经常写一堆Netsuite实体,并且正在使用Netsuite作为数据的真实来源,而不是尝试在Netsuite之上构建像JSON API这样的整个REST;我建议实现一个发布/订阅服务,其中Netsuite将事件发布到您的应用程序/ API所订阅的外部服务中;然后您的应用还会将变体发布到Netsuite所订阅服务中的某个频道。这样,发送到Netsuite的数据突变可以在中间层发生,从而降低了复杂性。同样,您的应用会利用订阅的事件来同步数据。
要检索外部应用程序的Netsuite数据,最有效的方法似乎是通过Netsuite ODBC数据库驱动程序;它提供与Netsuite数据库只读表视图的直接连接。简单选择查询一组在Postgres或MySQL中具有相同架构的项目通常需要0.5毫秒或更短的时间;通常需要15秒钟到100秒钟以上才能返回。 Netsuite的连接超时和其他错误很常见。但是,检索少量行可能需要15秒到100秒以上的时间。尽管如此,在14秒内检索一组5000个项目所需的所有数据将花费Netsuite的SOAP API小时。
答案 5 :(得分:1)
是的,Netsuite支持REST Web服务。 这是一个有效的Java示例,它使用了开源的抄写器库。
请注意,Netsuite需要Accept
的{{1}}(对于帖子来说,Content-Type
)标头才能使Netsuite接受请求,否则您将获得“请求媒体类型为无效。”错误。此外,必须为API类(NetSuiteApi.java)实现getSignatureType方法。
更改所有字符串常量以适合您的设置。请注意,此代码还将与Netsuite RESTlet一起使用。
REST文档在这里可用: https:// [your-netsuite-ID] .app.netsuite.com / help / helpcenter / zh_CN / PDF / REST_Web_Services.pdf
文件#1:NetSuiteApi.java
application/json
文件#2:NetSuiteApiCallExample.java
package com.scribe.api;
import com.github.scribejava.core.builder.api.DefaultApi10a;
import com.github.scribejava.core.model.OAuth1RequestToken;
public class NetSuiteApi extends DefaultApi10a {
private static class InstanceHolder {
private static final NetSuiteApi INSTANCE = new NetSuiteApi();
}
public static NetSuiteApi instance() {
return InstanceHolder.INSTANCE;
}
@Override
public String getAccessTokenEndpoint() {
return null;
}
@Override
public String getRequestTokenEndpoint() {
return null;
}
@Override
public String getAuthorizationUrl(OAuth1RequestToken requestToken) {
return null;
}
@Override
protected String getAuthorizationBaseUrl() {
return null;
}
@Override
public OAuth1SignatureType getSignatureType() {
return OAuth1SignatureType.HEADER;
}
}
将其添加到您的Maven依赖项(pom.xml):
package com.scribe.api;
import com.github.scribejava.core.builder.ServiceBuilder;
import com.github.scribejava.core.model.OAuth1AccessToken;
import com.github.scribejava.core.model.OAuthRequest;
import com.github.scribejava.core.model.Response;
import com.github.scribejava.core.model.Verb;
import com.github.scribejava.core.oauth.OAuth10aService;
public final class NetSuiteRestExample {
private String CONSUMER_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
private String CONSUMER_SECRET = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy";
private String TOKEN_ID = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
private String TOKEN_SECRET = "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb";
private String REST_URL = "https://1234567-sb1.suitetalk.api.netsuite.com/rest/platform/v1/record/inventoryitem/";
private String REALM = "1234567_SB1";
private String POSTBODY = "{\"type\": \"SIMPLE\",\"authorId\": -5}";
public static void main(String[] args) {
final OAuth10aService service = new ServiceBuilder(CONSUMER_KEY).apiSecret(CONSUMER_SECRET))
.build(NetSuiteApi.instance());
OAuth1AccessToken accessToken = new OAuth1AccessToken(TOKEN_ID, TOKEN_SECRET);
// This is POST method call
// OAuthRequest request = new OAuthRequest(Verb.POST, REST_URL);
// request.addHeader("Content-Type", "application/json");
// // Without next line, you'll get a "Request media type is not valid." error, even though this is not needed with Postman
// request.addHeader("Accept", "application/json");
// request.setRealm(REALM);
// request.setPayload(POSTBODY);
// This is GET method call
OAuthRequest request = new OAuthRequest(Verb.GET, params.get("REST_URL"));
// Without next line, you'll get a "Request media type is not valid." error, even though this is not needed with Postman
request.addHeader("Accept", "application/json");
request.setRealm(params.get("REALM"));
service.signRequest(accessToken, request);
System.out.println("Sending this request...");
System.out.println(request.getHeaders());
System.out.println(request.getCompleteUrl());
// System.out.println(request.getPayload());
final Response response = service.execute(request);
System.out.println("Got this response...");
System.out.println(response.getCode() + "\n" + response.getHeaders());
System.out.println(response.getBody());
return response.getBody();
}
}