Difference between revisions of "Home Library REST API"

From Gcube Wiki
Jump to: navigation, search
(Upload File)
Line 24: Line 24:
 
=== Get started ===
 
=== Get started ===
 
Home Library REST is available from gCube 4.1.
 
Home Library REST is available from gCube 4.1.
*HL_webapp next: https://workspace-repository-dev.research-infrastructures.eu/home-library-webapp
+
*HL_WEBAPP next: https://workspace-repository-dev.research-infrastructures.eu/home-library-webapp
*HL_webapp preProd: http://ws-repo-test.d4science.org/home-library-webapp
+
*HL_WEBAPP preProd: http://ws-repo-test.d4science.org/home-library-webapp
  
 
=== Create Folder ===
 
=== Create Folder ===
Line 31: Line 31:
 
To create a new folder:
 
To create a new folder:
 
<source lang="java">
 
<source lang="java">
HL_webapp/rest/CreateFolder?name=$name&description=$desc&parentPath=$path
+
HL_WEBAPP/rest/CreateFolder?name=$name&description=$desc&parentPath=$path
 
</source>
 
</source>
  
Line 42: Line 42:
  
 
<source lang="java">
 
<source lang="java">
HL_webapp/rest/CreateFolder?name=myFolder&description=myDescription&parentPath=/Home/valentina.marioli/Workspace/MyDocs/
+
HL_WEBAPP/rest/CreateFolder?name=myFolder&description=myDescription&parentPath=/Home/valentina.marioli/Workspace/MyDocs/
 
</source>
 
</source>
  
Line 48: Line 48:
 
To list the content of a folder:
 
To list the content of a folder:
 
<source lang="java">
 
<source lang="java">
HL_webapp/rest/List?absPath=$path
+
HL_WEBAPP/rest/List?absPath=$path
 
</source>
 
</source>
  
Line 57: Line 57:
  
 
<source lang="java">
 
<source lang="java">
HL_webapp/rest/List?absPath=/Home/valentina.marioli/Workspace/MySpecialFolders/gcube-devNext-NextNext/
+
HL_WEBAPP/rest/List?absPath=/Home/valentina.marioli/Workspace/MySpecialFolders/gcube-devNext-NextNext/
 
</source>
 
</source>
 
Output:
 
Output:
Line 183: Line 183:
 
To remove a file or a folder:
 
To remove a file or a folder:
 
<source lang="java">
 
<source lang="java">
HL_webapp/rest/Delete?absPath=$path
+
HL_WEBAPP/rest/Delete?absPath=$path
 
</source>
 
</source>
  

Revision as of 17:35, 26 October 2016

Overview

The Home Library REST interface provides a simple access to basic HL features.

Key features

Users can use the token to access to REST interface. They can access just their own files and the folders shared with them.

Home Library REST interface supports the following operations:

  • Create Folder: to create a folder in the given parent path;
  • List: to list the content of a folder;
  • Upload file: to upload a file in a folder;
  • Remove files and folders: to remove a file or a folder (including subfolders).

Use cases

Users can:

  • use the browser to call API Methods, using username and his/her token as password;
  • implement a Client in different languages, setting the token on the header of the request.

Design

Architecture

API

Get started

Home Library REST is available from gCube 4.1.

Create Folder

To create a new folder:

HL_WEBAPP/rest/CreateFolder?name=$name&description=$desc&parentPath=$path

Where:

  • name: the name of the new folder.
  • description: the description for the new folder.
  • parentPath: the position where you want to save the folder.

Example:

HL_WEBAPP/rest/CreateFolder?name=myFolder&description=myDescription&parentPath=/Home/valentina.marioli/Workspace/MyDocs/

List

To list the content of a folder:

HL_WEBAPP/rest/List?absPath=$path

Where:

  • absPath: the absolute path of the folder to list.

Example:

HL_WEBAPP/rest/List?absPath=/Home/valentina.marioli/Workspace/MySpecialFolders/gcube-devNext-NextNext/

Output: A list of entries with:

  • name: the name of the file/folder;
  • flag: true if the item is a folder, false if it is a file.


<map>
  <entry>
    <string>BlueBRIDGE_QER_M13-15_Q5_Template(2).xlsx</string>
    <boolean>false</boolean>
  </entry>
  <entry>
    <string>myFolder</string>
    <boolean>true</boolean>
  </entry>
  <entry>
    <string>home-library-jcr-2.5.0-SNAPSHOT.jar</string>
    <boolean>false</boolean>
  </entry>
  <entry>
    <string>aaa</string>
    <boolean>true</boolean>
  </entry>
  <entry>
    <string>BlueBRIDGE_QER_M13-15_Q5_Template.xlsx</string>
    <boolean>false</boolean>
  </entry>
  <entry>
    <string>BlueBRIDGE_QER_M13-15_Q5_Template(1).xlsx</string>
    <boolean>false</boolean>
  </entry>
</map>

Upload File

To upload a file, if it does not already exist:

HL_WEBAPP/rest/Upload?name=$name&description=$description&parentPath=$path

Where:

  • name: the file to upload
  • description: a description for the file
  • parentPath: the position where you want to save the file.

If you want to skip mimetype and size detect steps because you already know them, you can pass them as parameter:

HL_WEBAPP/rest/Upload?name=$name&description=$description&parentPath=$path&mimetype=$mimetype&size=$size

You have to attach the file as mutipart content of your request.

Example:

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.file.Files;
import java.util.UUID;
 
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
import com.thoughtworks.xstream.XStream;
 
public class UploadFileRest {
 
	private static final String DEFAULT_IMAGE = "default.jpg";
	private static final String ROOT_PATH = "/Home/test.user/Workspace/";
 
	public static void main(String[] args) throws Exception {
 
		SecurityTokenProvider.instance.set(HERE_YOUR_TOKEN);
		URL imageURL = UploadFileRest.class.getClassLoader().getResource(DEFAULT_IMAGE);
		File file = new File(imageURL.getFile());
 
		byte[] image = Files.readAllBytes(file.toPath());
		System.out.println(uploadFile(image, "default-"+ UUID.randomUUID().toString()+".jpg", "my description", ROOT_PATH));
 
	}
 
 
	public static String uploadFile(byte[] in, String name, String description, String parentPath) throws Exception {
		XStream xstream = new XStream();
		String uri = HL_WEBAPP + "/rest/Upload?" + "name=" + name+ "&description=" + URLEncoder.encode(description, "UTF-8") + "&parentPath=" + URLEncoder.encode(parentPath, "UTF-8");
 
		URL url = new URL(uri);
		HttpURLConnection connection = (HttpURLConnection)url.openConnection();
		connection.setDoInput(true);
		connection.setDoOutput(true);
		connection.setUseCaches(false);
		connection.setRequestProperty("Content-Type", "image/jpeg");
		connection.setRequestMethod("POST");
		TokenUtility.setHeader(connection);
 
		// Write file to response.
	        OutputStream output = connection.getOutputStream();
	        output.write(in);
	        output.close();
 
		BufferedReader r = new BufferedReader(new  InputStreamReader(connection.getInputStream()));
 
		StringBuffer response = new StringBuffer();
		String inputLine;
		while ((inputLine = r.readLine()) != null) {
			response.append(inputLine);
		}
 
		String xmlOut = response.toString();
		return (String) xstream.fromXML(xmlOut);
	}
 
}

Delete File or folder

To remove a file or a folder:

HL_WEBAPP/rest/Delete?absPath=$path

Where:

  • absPath: the absolute path of the file/folder to remove.

Output:

  • true: if the file/folder has been correctly removed;
  • false: otherwise.