DigitalOcean API Client Build Status License

v2.8 released and tagged on Dec 27, 2016

Simple & Lightweight API client library for Enterprise Application or Utilities Integration around DigitalOcean RESTful APIs. You can use this library with project based (JVM hosted languages) on Java, Groovy, Scala, Clojure, etc.

Give your support by clicking Hearts on DigitalOcean Developers Community :)

Getting Started

For handy use, DigitalOcean API Client library project dependency definition provided below or you wanna jar Download it from Maven central repo.

Note: master branch maps to v2 APIs and digitalocean turned off v1 APIs as on Nov 9, 2015 .

Maven dependency

<dependency>
    <groupId>com.myjeeva.digitalocean</groupId>
    <artifactId>digitalocean-api-client</artifactId>
    <version>2.8</version>
</dependency>

Gradle/Grails dependency

compile 'com.myjeeva.digitalocean:digitalocean-api-client:2.8'

Groovy Grape

@Grapes(
@Grab(group='com.myjeeva.digitalocean', module='digitalocean-api-client', version='2.8')
)

Scala SBT

libraryDependencies += "com.myjeeva.digitalocean" % "digitalocean-api-client" % "2.8"

Note: For Android projects, kindly include the httpclient-android library explicitly in your project dependencies.


Getting Help

For API documentation see:

For Example usage see:

Samples

Creating a DigitalOcean Client in three simple ways!

// Way one, just pass on authToken
DigitalOcean apiClient = new DigitalOceanClient(authToken);

// Way two, pass on version number & authToken
DigitalOcean apiClient = new DigitalOceanClient("v2", authToken);

// Way three, pass on version number, authToken & httpClient
// Go ahead and customize httpClient attributes for requirements
CloseableHttpClient httpClient = HttpClients.createDefault();
DigitalOcean apiClient = new DigitalOceanClient("v2", authToken, httpClient);

Let's invoke the method(s) as per need via apiClient

// Fetching all the available droplets from control panel
Droplets droplets = apiClient.getAvailableDroplets(pageNo, perPage);

// Fetching all the available kernels for droplet
Kernels kernels = apiClient.getAvailableKernels(dropletId, pageNo, perPage);

// Create a new droplet
Droplet newDroplet = new Droplet();
newDroplet.setName("api-client-test-host");
newDroplet.setSize(new Size("512mb")); // setting size by slug value
newDroplet.setRegion(new Region("sgp1")); // setting region by slug value; sgp1 => Singapore 1 Data center
newDroplet.setImage(new Image(1601)); // setting by Image Id 1601 => centos-5-8-x64 also available in image slug value
newDroplet.setEnableBackup(Boolean.TRUE);
newDroplet.setEnableIpv6(Boolean.TRUE);
newDroplet.setEnablePrivateNetworking(Boolean.TRUE);

// Adding SSH key info
List<Key> keys = new ArrayList<Key>();
keys.add(new Key(6536653));
keys.add(new Key(6536654));
newDroplet.setKeys(keys);

// Adding Metadata API - User Data
newDroplet.setUserData(" < YAML Content > "); // Follow DigitalOcean documentation to prepare user_data value
Droplet droplet = apiClient.createDroplet(newDroplet);


// Creating multiple droplets
Droplet droplet = new Droplet();
droplet.setNames(Arrays.asList("sub-01.example.com", "sub-02.example.com"));
droplet.setSize("512mb");
droplet.setImage(new Image("ubuntu-14-04-x64"));
droplet.setRegion(new Region("nyc1"));
Droplets droplets = apiClient.createDroplets(droplet);

// Fetch droplet information
Droplet droplet = apiClient.getDropletInfo(dropletId);

// Fetch Available Plans/Sizes supported by DigitalOcean
Sizes sizes = apiClient.getAvailableSizes(pageNo);

// Fetch Available Regions supported by DigitalOcean
Regions regions = apiClient.getAvailableRegions(pageNo);

Accessing RateLimit header values from return object. This is applicable for all requests.

Droplets droplets = getAvailableDroplets(1, 20);
RateLimit rateLimit = droplets.getRateLimit();

Actions actions = getAvailableActions(2, 40);
RateLimit rateLimit = actions.getRateLimit();

Domain domain = getDomainInfo("myjeeva.com");
RateLimit rateLimit = domain.getRateLimit();

Droplet droplet = getDropletInfo(10000001);
RateLimit rateLimit = droplet.getRateLimit();

Reporting Issues

DigitalOcean API Client uses GitHub’s integrated issue tracking system to record bugs and feature requests. If you want to raise an issue, please follow the recommendations bellow:

  • Before you log a bug, please search the issue tracker to see if someone has already reported the problem. If the issue doesn’t already exist, create a new issue.
  • Please provide as much information as possible with the issue report, we like to know the version of DigitalOcean API Client that you are using.
  • If you need to paste code, or include a stack trace use Markdown ``` escapes before and after your text.

Supported API's and Revision Logs

  • Released in v2.8
    • Added new endpoint support /v2/snapshots/* #58, PR #57 (@samuelfac)
      • Snapshots
        Snapshots getAvailableSnapshots(Integer pageNo, Integer perPage)
        Snapshots getAllDropletSnapshots(Integer pageNo, Integer perPage)
        Snapshots getAllVolumeSnapshots(Integer pageNo, Integer perPage)
        Snapshot getSnaphotInfo(String snapshotId)
        Delete deleteSnapshot(String snapshotId)
        
      • Due to new endpoint /v2/snapshots/* introduced by DO, I had to refactor following methods to make it clean and meaningful
        getAvailableSnapshots(Integer dropletId, Integer pageNo, Integer perPage) ==> getDropletSnapshots(Integer dropletId, Integer pageNo, Integer perPage)
        getAvailableKernels(Integer dropletId, Integer pageNo, Integer perPage) ==> getDropletKernels(Integer dropletId, Integer pageNo, Integer perPage)
        getAvailableBackups(Integer dropletId, Integer pageNo) ==> getDropletBackups(Integer dropletId, Integer pageNo, Integer perPage)
        
    • Added volumes and tags attribute for create droplet #56
  • Released in v2.7
    • Added new endpoint support /v2/volumes/* #54, PR #55 (@strokine)
      • Volumes
        Volumes getAvailableVolumes(String regionSlug)
        Volume createVolume(Volume volume)
        Volume getVolumeInfo(String volumeId)
        Volumes getVolumeInfo(String volumeName, String regionSlug)
        Delete deleteVolume(String volumeId)
        Delete deleteVolume(String volumeName, String regionSlug)
        
      • Volumes Actions
        Action attachVolume(Integer dropletId, String volumeId, String regionSlug)
        Action attachVolumeByName(Integer dropletId, String volumeName, String regionSlug)
        Action detachVolume(Integer dropletId, String volumeId, String regionSlug)
        Action detachVolumeByName(Integer dropletId, String volumeName, String regionSlug)
        Action resizeVolume(String volumeId, String regionSlug, Double sizeGigabytes)
        Actions getAvailableVolumeActions(String volumeId)
        Action getVolumeAction(String volumeId, Integer actionId)        
        
    • Gson library updated to v2.7
  • Released in v2.6
    • Fix for delete droplet error #52
  • Released in v2.5
    • Added new endpoint support /v2/tags/* #48
      • Tags
        Tags getAvailableTags(Integer pageNo, Integer perPage)
        Tag getTag(String name)
        Tag updateTag(String currentName, String newName)
        Delete deleteTag(String name)
        Response tagResources(String name, List resources)
        Response untagResources(String name, List resources)
        
    • Added new Attribute to the Image #49
    • Fix for incorrect time zone returned from getActionInfo #47
  • Released in v2.4
    • getDomainRecords supports pagination params via PR #46
  • Released in v2.3
    • Action enableDropletBackups(Integer dropletId)
    • Droplets createDroplets(Droplet droplet)
    • Added floating_ip_limit attribute into Account class
    • updateDomainRecord() method accepts DomainRecord as an input parameter
    • per_page parameter added to all the supported APIs
    • Floating IPs
      FloatingIPs getAvailableFloatingIPs(Integer pageNo, Integer perPage)
      FloatingIP createFloatingIP(Integer dropletId)
      FloatingIP createFloatingIP(String region)
      FloatingIP getFloatingIPInfo(String ipAddress)
      Delete deleteFloatingIP(String ipAddress)
      
    • Floating IPs Actions
      Action assignFloatingIP(Integer dropletId, String ipAddress)
      Action unassignFloatingIP(String ipAddress)
      Actions getAvailableFloatingIPActions(String ipAddress, Integer pageNo, Integer perPage)
      Action getFloatingIPActionInfo(String ipAddress, Integer actionId)
      
  • Released in v2.2
  • Released in v2.1
    • Enhancements
      • Libs version upgraded to latest
      • Less objects generation
  • Released in v2.0
    • Account
    Account getAccountInfo()
    • Actions
      Actions getAvailableActions(Integer pageNo, Integer perPage)
      Actions getAvailableDropletActions(Integer dropletId, Integer pageNo, Integer perPage)
      Actions getAvailableImageActions(Integer imageId, Integer pageNo, Integer perPage)
      Action getActionInfo(Integer actionId)
    • Droplets
      Droplets getAvailableDroplets(Integer pageNo, Integer perPage)
      Kernels getAvailableKernels(Integer dropletId, Integer pageNo, Integer perPage)
      Snapshots getAvailableSnapshots(Integer dropletId, Integer pageNo, Integer perPage)
      Backups   getAvailableBackups(Integer dropletId, Integer pageNo)
      Droplet   getDropletInfo(Integer dropletId)
      Droplet   createDroplet(Droplet droplet)
      Delete deleteDroplet(Integer dropletId)
      Droplets getDropletNeighbors(Integer dropletId, Integer pageNo)
      Neighbors getAllDropletNeighbors(Integer pageNo)
      
    • Droplet Actions
      Action powerCycleDroplet(Integer dropletId)
      Action powerOffDroplet(Integer dropletId)
      Action powerOnDroplet(Integer dropletId)
      Action rebootDroplet(Integer dropletId)
      Action rebuildDroplet(Integer dropletId, Integer imageId)
      Action renameDroplet(Integer dropletId, String name)
      Action resetDropletPassword(Integer dropletId)
      Action resizeDroplet(Integer dropletId, String size)
      Action restoreDroplet(Integer dropletId, Integer imageId)
      Action shutdownDroplet(Integer dropletId)
      Action takeDropletSnapshot(Integer dropletId)
      Action takeDropletSnapshot(Integer dropletId, String snapshotName)
      Action disableDropletBackups(Integer dropletId)
      Action enableDropletIpv6(Integer dropletId)
      Action enableDropletPrivateNetworking(Integer dropletId)
      Action changeDropletKernel(Integer dropletId, Integer kernelId)
      
    • Images
      Images getAvailableImages(Integer pageNo, Integer perPage)
      Images getAvailableImages(Integer pageNo, Integer perPage, ActionType type)
      Image getImageInfo(Integer imageId)
      Image getImageInfo(String slug)
      Image updateImage(Image image)
      Delete deleteImage(Integer imageId)
      Action transferImage(Integer imageId, String regionSlug)
      Action convertImage(Integer imageId)
      Images getUserImages(Integer pageNo, Integer perPage)
      
    • Sizes
    Sizes getAvailableSizes(Integer pageNo)
    • Regions
    Regions getAvailableRegions(Integer pageNo)
    • Domains
      Domains    getAvailableDomains(Integer pageNo)
      Domain getDomainInfo(String domainName)
      Domain createDomain(Domain domain)
      Delete deleteDomain(String domainName)
      
    • Domain Records
      DomainRecords getDomainRecords(String domainName, Integer pageNo, Integer perPage)
      DomainRecord getDomainRecordInfo(String domainName, Integer recordId)
      DomainRecord createDomainRecord(String domainName, DomainRecord domainRecord)
      DomainRecord updateDomainRecord(String domainName, Integer recordId, String name)
      Delete deleteDomainRecord(String domainName, Integer recordId)
      
    • Keys
      Keys getAvailableKeys(Integer pageNo)
      Key   getKeyInfo(Integer sshKeyId)
      Key   getKeyInfo(String fingerprint)
      Key   createKey(Key newKey)
      Key   updateKey(Integer sshKeyId, String newSshKeyName)
      Key   updateKey(String fingerprint, String newSshKeyName)
      Delete deleteKey(Integer sshKeyId)
      Delete deleteKey(String fingerprint)
      

Author

Jeevanandam M. - jeeva@myjeeva.com

Contributing

  1. Fork it
  2. Create your feature branch - git checkout -b my-new-feature
  3. Implement your changes and apply Google Java Code Formatter
  4. Commit your changes - git commit -am 'Added feature'
  5. Push to the branch - git push origin my-new-feature
  6. Create new Pull Request

License

DigitalOcean API Client - MIT License.



DigitalOcean API Client Build Status License

v2.8于2016年12月27日发布和标记

简单&amp;围绕 DigitalOcean RESTful API 的企业应用程序或实用程序集成轻量级API客户端库。您可以在Java,Groovy,Scala,Clojure等上使用该库与基于项目(JVM托管语言)。

DigitalOcean Developers Community 上单击心,提供支持:)

Getting Started

为方便使用,DigitalOcean API客户端库项目依赖关系定义如下,或者想要jar 从Maven Central repo下载

注意: master 分支映射到v2 API和digitalocean已关闭 v1 API ,于2015年11月9日。

Maven依赖关系

<dependency>
    <groupId>com.myjeeva.digitalocean</groupId>
    <artifactId>digitalocean-api-client</artifactId>
    <version>2.8</version>
</dependency>

Gradle / Grails依赖关系

compile 'com.myjeeva.digitalocean:digitalocean-api-client:2.8'

Groovy Grape

@Grapes(
@Grab(group='com.myjeeva.digitalocean', module='digitalocean-api-client', version='2.8')
)

Scala SBT

libraryDependencies += "com.myjeeva.digitalocean" % "digitalocean-api-client" % "2.8"

注意:对于Android项目,请在项目依赖关系中显式地包含 httpclient-android 库。


Getting Help

有关API文档,请参阅:

有关示例用法,请参阅:

Samples

以三种简单的方式创建DigitalOcean客户端

// Way one, just pass on authToken
DigitalOcean apiClient = new DigitalOceanClient(authToken);

// Way two, pass on version number & authToken DigitalOcean apiClient = new DigitalOceanClient("v2", authToken);

// Way three, pass on version number, authToken & httpClient // Go ahead and customize httpClient attributes for requirements CloseableHttpClient httpClient = HttpClients.createDefault(); DigitalOcean apiClient = new DigitalOceanClient("v2", authToken, httpClient);

让我们通过apiClient 调用根据需要的方法

// Fetching all the available droplets from control panel
Droplets droplets = apiClient.getAvailableDroplets(pageNo, perPage);

// Fetching all the available kernels for droplet Kernels kernels = apiClient.getAvailableKernels(dropletId, pageNo, perPage);

// Create a new droplet Droplet newDroplet = new Droplet(); newDroplet.setName("api-client-test-host"); newDroplet.setSize(new Size("512mb")); // setting size by slug value newDroplet.setRegion(new Region("sgp1")); // setting region by slug value; sgp1 => Singapore 1 Data center newDroplet.setImage(new Image(1601)); // setting by Image Id 1601 => centos-5-8-x64 also available in image slug value newDroplet.setEnableBackup(Boolean.TRUE); newDroplet.setEnableIpv6(Boolean.TRUE); newDroplet.setEnablePrivateNetworking(Boolean.TRUE);

// Adding SSH key info List<Key> keys = new ArrayList<Key>(); keys.add(new Key(6536653)); keys.add(new Key(6536654)); newDroplet.setKeys(keys);

// Adding Metadata API - User Data newDroplet.setUserData(" < YAML Content > "); // Follow DigitalOcean documentation to prepare user_data value Droplet droplet = apiClient.createDroplet(newDroplet);

// Creating multiple droplets Droplet droplet = new Droplet(); droplet.setNames(Arrays.asList("sub-01.example.com", "sub-02.example.com")); droplet.setSize("512mb"); droplet.setImage(new Image("ubuntu-14-04-x64")); droplet.setRegion(new Region("nyc1")); Droplets droplets = apiClient.createDroplets(droplet);

// Fetch droplet information Droplet droplet = apiClient.getDropletInfo(dropletId);

// Fetch Available Plans/Sizes supported by DigitalOcean Sizes sizes = apiClient.getAvailableSizes(pageNo);

// Fetch Available Regions supported by DigitalOcean Regions regions = apiClient.getAvailableRegions(pageNo);

从返回对象访问 RateLimit 头值。这适用于所有请求

Droplets droplets = getAvailableDroplets(1, 20);
RateLimit rateLimit = droplets.getRateLimit();

Actions actions = getAvailableActions(2, 40); RateLimit rateLimit = actions.getRateLimit();

Domain domain = getDomainInfo("myjeeva.com"); RateLimit rateLimit = domain.getRateLimit();

Droplet droplet = getDropletInfo(10000001); RateLimit rateLimit = droplet.getRateLimit();

Reporting Issues

DigitalOcean API客户端使用 GitHub的集成问题跟踪系统记录错误和功能请求。如果您想提出问题,请按照以下建议:

  • 在您记录错误之前,请搜索问题跟踪器以查看有人是否已经报告了问题。如果问题不存在,请创建新问题。
  • 请在问题报告中提供尽可能多的信息,我们希望了解您正在使用的DigitalOcean API Client版本。
  • 如果您需要粘贴代码,或者包含堆栈跟踪,请在文本前后使用Markdown`转义。

Supported API's and Revision Logs

  • 已发布于v2.8
    • 添加了新的端点支持 / v2 / snapshots / * #58 ,PR #57 (@samuelfac)
        快照
        快照getAvailableSnapshots(整数pageNo,整数perPage)
        快照getAllDropletSnapshots(整数pageNo,整数perPage)
        快照getAllVolumeSnapshots(整数pageNo,整数perPage)
        快照getSnaphotInfo(String snapshotId)
        删除deleteSnapshot(String snapshotId)
        
        由于DO引入了新的端点 / v2 / snapshots / * ,我不得不重构以下方法,使其清晰有意义
         getAvailableSnapshots(Integer dropsId,Integer pageNo,Integer perPage)==&gt; getDropletSnapshots(Integer dropsId,Integer pageNo,Integer perPage)
        getAvailableKernels(Integer dropsId,Integer pageNo,Integer perPage)==&gt; getDropletKernels(Integer dropsId,Integer pageNo,Integer perPage)
        getAvailableBackups(Integer dropsId,Integer pageNo)==&gt; getDropletBackups(Integer dropsId,Integer pageNo,Integer perPage)
        
    • 为创建小滴添加标签属性#56
  • 发布于v2.7
    • 添加新的端点支持 / v2 / volumes / * #54 ,PR #55 (@strokine)
      •  Volumes getAvailableVolumes(String regionSlug)
        卷volumeVolume(卷卷)
        卷getVolumeInfo(String volumeId)
        Volumes getVolumeInfo(String volumeName,String regionSlug)
        删除deleteVolume(String volumeId)
        删除deleteVolume(String volumeName,String regionSlug)
        
      • 卷操作
         Action attachVolume(Integer dropsId,String volumeId,String regionSlug)
        Action attachVolumeByName(Integer dropsId,String volumeName,String regionSlug)
        Action detachVolume(Integer dropsId,String volumeId,String regionSlug)
        Action detachVolumeByName(Integer dropsId,String volumeName,String regionSlug)
        Action resizeVolume(String volumeId,String regionSlug,Double sizeGigabytes)
        操作getAvailableVolumeActions(String volumeId)
        Action getVolumeAction(String volumeId,Integer actionId)
        
    • Gson图书馆更新到v2.7
  • 发布于v2.6
    • 修正删除墨滴错误#52
  • 已在v2.5中发布
    • 添加新的端点支持 / v2 / tags / * #48
        标签
        标签getAvailableTags(整数pageNo,整数perPage)
        标签getTag(String name)
        标记updateTag(String currentName,String newName)
        删除deleteTag(String name)
        响应tagResources(String name,List resources)
        响应untagResources(字符串名称,列表资源)
        
    • 向图像添加新属性#49
    • 修正从getActionInfo返回的错误时区#47
  • 已在v2.4中发布
    • getDomainRecords 通过PR #46 支持分页参数
  • 在v2.3中发布
    • Action enableDropletBackups(Integer dropsId)
    • Droplets createDroplets(Droplet droplet)
    • floating_ip_limit 属性添加到帐户
    • updateDomainRecord()方法接受 DomainRecord 作为输入参数
    • per_page 参数添加到所有支持的API
    • 浮动IP
      
     FloatingIPs getAvailableFloatingIPs(Integer pageNo,Integer perPage)
      FloatingIP createFloatingIP(Integer dropsId)
      FloatingIP createFloatingIP(String region)
      FloatingIP getFloatingIPInfo(String ipAddress)
      删除deleteFloatingIP(String ipAddress)
      
    • 浮动IP操作
      
     Action assignFloatingIP(Integer dropletId,String ipAddress)
      Action unassignFloatingIP(String ipAddress)
      操作getAvailableFloatingIPActions(String ipAddress,Integer pageNo,Integer perPage)
      Action getFloatingIPActionInfo(String ipAddress,Integer actionId)
      
  • 已在v2.2中发布
  • 已在v2.1中发布
    • 增强功能
      • Libs版本升级到最新版本
      • 生成较少的对象
  • 已在v2.0中发布
    • 帐户
      
     Account getAccountInfo()
    • 动作
      
    操作getAvailableActions(整数pageNo,整数perPage)
      操作getAvailableDropletActions(Integer dropsId,Integer pageNo,Integer perPage)
      Action getAvailableImageActions(Integer imageId,Integer pageNo,Integer perPage)
      Action getActionInfo(Integer actionId)
    • 微滴
      
     Droplet getAvailableDroplets(Integer pageNo,Integer perPage)
      内核getAvailableKernels(Integer dropsId,Integer pageNo,Integer perPage)
      快照getAvailableSnapshots(整数tinyId,整数pageNo,整数perPage)
      备份getAvailableBackups(Integer dropsId,Integer pageNo)
      Droplet getDropletInfo(Integer dropsId)
      液滴创建滴液(液滴)
      删除deleteDroplet(Integer dropsId)
      Droplet getDropletNeighbors(Integer dropsId,Integer pageNo)
      邻居getAllDropletNeighbors(Integer pageNo)
      
    • Droplet Actions
      动作powerCycleDroplet(Integer dropsId)   动作powerOffDroplet(Integer dropsId)   动作powerOnDroplet(Integer dropsId)   Action rebootDroplet(Integer dropsId)   Action rebuildDroplet(Integer dropsId,Integer imageId)   Action renameDroplet(Integer dropsId,String name)   Action resetDropletPassword(Integer dropsId)   Action resizeDroplet(Integer dropsId,String size)   Action restoreDroplet(Integer dropsId,Integer imageId)   动作shutdownDroplet(Integer dropsId)   动作takeDropletSnapshot(Integer dropsId)   Action takeDropletSnapshot(Integer dropsId,String snapshotName)   Action disableDropletBackups(Integer dropsId)   Action enableDropletIpv6(整数dropsId)   Action enableDropletPrivateNetworking(Integer dropsId)   Action changeDropletKernel(Integer dropsId,Integer kernelId)   
    • 图片
      
    图像getAvailableImages(整数pageNo,整数perPage)
      图像getAvailableImages(整数pageNo,整数perPage,ActionType类型)
      图像getImageInfo(Integer imageId)
      图像getImageInfo(String slug)
      图像更新图像(图像图像)
      删除deleteImage(整数imageId)
      Action transferImage(Integer imageId,String regionSlug)
      Action convertImage(Integer imageId)
      图像getUserImages(整数pageNo,整数perPage)
      
    • 大小
      
    大小getAvailableSizes(整数pageNo)
    • 地区
      
     Regions getAvailableRegions(Integer pageNo)
      
    域名getAvailableDomains(Integer pageNo)
      域getDomainInfo(String domainName)
      域createDomain(域域)
      删除delete域(String domainName)
      
    • 域记录
      
     DomainRecords getDomainRecords(String domainName,Integer pageNo,Integer perPage)
      DomainRecord getDomainRecordInfo(String domainName,Integer recordId)
      DomainRecord createDomainRecord(String domainName,DomainRecord domainRecord)
      DomainRecord updateDomainRecord(String domainName,Integer recordId,String name)
      删除deleteDomainRecord(String domainName,Integer recordId)
      
      键getAvailableKeys(Integer pageNo)   Key getKeyInfo(Integer sshKeyId)   Key getKeyInfo(String指纹)   Key createKey(Key newKey)   Key updateKey(整数sshKeyId,String newSshKeyName)   Key updateKey(String fingerprint,String newSshKeyName)   删除deleteKey(整数sshKeyId)   删除deleteKey(String指纹)   

Author

Jeevanandam M. - jeeva@myjeeva.com

Contributing

  1. Fork it
  2. Create your feature branch - git checkout -b my-new-feature
  3. Implement your changes and apply Google Java Code Formatter
  4. Commit your changes - git commit -am 'Added feature'
  5. Push to the branch - git push origin my-new-feature
  6. Create new Pull Request

License

DigitalOcean API客户端 - 麻省理工学院许可证




相关问题推荐