需要一些关于如何使用 Assembla 的指导 API
Need some pointers on how to use the Assembla API
我需要先进行一些 Assembla 身份验证,然后才能将我的程序分发给那些可以使用登录并使用它的人。
但是我在使用 Assembla API 时遇到了一些问题,因为我以前从未在 Java 中真正使用过 REST HTML API。
我需要获取用户所属的所有空间,然后确定用户是否属于我设置的任何空间,以便我可以允许他们进入应用程序。在网站上,我似乎会使用这个:
http://api-doc.assembla.com/content/ref/spaces_index.html
但是我该如何使用呢?我知道我需要发出 HTTP GET 请求,但我不知道如何在 Java.
中形成请求属性
到目前为止我得到了这个:
String authentication = "username:password";
String encoding = Base64.getEncoder().encodeToString(authentication.getBytes());
URL url = new URL("https://www.assembla.com/");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Authorization", "Basic " + encoding);
conn.connect();
for (Entry<String, List<String>> header : conn.getHeaderFields().entrySet()) {
System.out.println(header.getKey() + "=" + header.getValue());
}
有什么帮助吗?
请注意它使用 OAuth2,因此请求应该有一个授权:Bearer {token}。
您正在使用 Basic,这是另一种类型的授权。
在 link 你给出的请求是用 curl 和 "Authorization: Bearer token"
curl -i -H "Authorization: Bearer _token" https://api.assembla.com/v1/spaces.xml
希望能解决您的问题。
老实说,使用 OAuth2 库比自己动手更好。 OAuth2 需要许多奇怪的怪癖,这使得从头开始(或仅使用 curl)使用它变得困难。我使用 Node.js 编写了一个应用程序,该应用程序使用组合 API 和一个名为 simple-oauth 的节点 OAuth 库。可能有几个 Java 库可以帮助您起步(例如 google 的 https://github.com/google/google-oauth-java-client)。 Assembla 并不完全清楚要将什么发送到哪里,所以这里有一些来自我的 JS 代码的示例,可以让您对要做什么有一个粗略的想法:
oauth2 = require('simple-oauth2')({
clientID: config.creds.clientID,
clientSecret: config.creds.clientSecret,
site: 'https://api.assembla.com',
authorizationPath: '/authorization',
tokenPath: '/token'
});
//user hits this route, but doesn't have a auth code, so we redirect
app.get('/', function (req, res) {
res.redirect('/auth');
});
var authorization_uri = oauth2.authCode.authorizeURL({
client_id: config.creds.clientID,
response_type: 'code'
});
app.get('/auth', function (req, res) {
res.redirect(authorization_uri);
});
//callback url route specifed when you made your app
app.get('/callback', function (req, res) {
var code = req.query.code;
//we've got an auth code,
//so now we can get a bearer token
oauth2.authCode.getToken({
code: code,
grant_type: 'authorization_code'
}, saveToken);
function saveToken(error, result) {
if (error) {
console.log('Access Token Error', error);
res.redirect('/');
return;
}
var token = oauth2.accessToken.create(result);
pullSpaces( res, token );
}
});
function pullSpaces ( res, token ) {
request({
method: 'GET',
uri: 'https://api.assembla.com/v1/spaces',
auth: {
bearer: token.token.access_token
}
}, function (error, response, body) {
//this contains a json object of all the user's spaces
});
}
很抱歉发送 Java 脚本示例而不是 Java,但我的时间很短 ;)
我需要先进行一些 Assembla 身份验证,然后才能将我的程序分发给那些可以使用登录并使用它的人。
但是我在使用 Assembla API 时遇到了一些问题,因为我以前从未在 Java 中真正使用过 REST HTML API。
我需要获取用户所属的所有空间,然后确定用户是否属于我设置的任何空间,以便我可以允许他们进入应用程序。在网站上,我似乎会使用这个:
http://api-doc.assembla.com/content/ref/spaces_index.html
但是我该如何使用呢?我知道我需要发出 HTTP GET 请求,但我不知道如何在 Java.
中形成请求属性到目前为止我得到了这个:
String authentication = "username:password";
String encoding = Base64.getEncoder().encodeToString(authentication.getBytes());
URL url = new URL("https://www.assembla.com/");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Authorization", "Basic " + encoding);
conn.connect();
for (Entry<String, List<String>> header : conn.getHeaderFields().entrySet()) {
System.out.println(header.getKey() + "=" + header.getValue());
}
有什么帮助吗?
请注意它使用 OAuth2,因此请求应该有一个授权:Bearer {token}。 您正在使用 Basic,这是另一种类型的授权。
在 link 你给出的请求是用 curl 和 "Authorization: Bearer token"
curl -i -H "Authorization: Bearer _token" https://api.assembla.com/v1/spaces.xml
希望能解决您的问题。
老实说,使用 OAuth2 库比自己动手更好。 OAuth2 需要许多奇怪的怪癖,这使得从头开始(或仅使用 curl)使用它变得困难。我使用 Node.js 编写了一个应用程序,该应用程序使用组合 API 和一个名为 simple-oauth 的节点 OAuth 库。可能有几个 Java 库可以帮助您起步(例如 google 的 https://github.com/google/google-oauth-java-client)。 Assembla 并不完全清楚要将什么发送到哪里,所以这里有一些来自我的 JS 代码的示例,可以让您对要做什么有一个粗略的想法:
oauth2 = require('simple-oauth2')({
clientID: config.creds.clientID,
clientSecret: config.creds.clientSecret,
site: 'https://api.assembla.com',
authorizationPath: '/authorization',
tokenPath: '/token'
});
//user hits this route, but doesn't have a auth code, so we redirect
app.get('/', function (req, res) {
res.redirect('/auth');
});
var authorization_uri = oauth2.authCode.authorizeURL({
client_id: config.creds.clientID,
response_type: 'code'
});
app.get('/auth', function (req, res) {
res.redirect(authorization_uri);
});
//callback url route specifed when you made your app
app.get('/callback', function (req, res) {
var code = req.query.code;
//we've got an auth code,
//so now we can get a bearer token
oauth2.authCode.getToken({
code: code,
grant_type: 'authorization_code'
}, saveToken);
function saveToken(error, result) {
if (error) {
console.log('Access Token Error', error);
res.redirect('/');
return;
}
var token = oauth2.accessToken.create(result);
pullSpaces( res, token );
}
});
function pullSpaces ( res, token ) {
request({
method: 'GET',
uri: 'https://api.assembla.com/v1/spaces',
auth: {
bearer: token.token.access_token
}
}, function (error, response, body) {
//this contains a json object of all the user's spaces
});
}
很抱歉发送 Java 脚本示例而不是 Java,但我的时间很短 ;)