This library has been designed to be as simple and intuitive as possible to use.
most of the usage can be inferred by auto-completing your way though the API.
add the following dependency to your maven project:
<dependency>
<groupId>com.avihu-harush</groupId>
<artifactId>airtable4j</artifactId>
<version>3.1.5</version>
</dependency>
or to your gradle project:
implementation 'com.avihu-harush:airtable4j:3.1.5'
You have 2 ways of getting a reference to your Airtable data, by pointing to the root or a specific table.
Airtable.PublicApi airtablePublicApi = Airtable.buildInstance("API_KEY", "DATABASE", "TABLE");
Airtable.CustomPublicApi airtableCustomPublicApi = Airtable.buildInstance("API_KEY");
You can provide the Airtable API key as a system property or environment variable.
simply set a variable name AIRTABLE4J_API_KEY
and instantiate Airtable like so:
Airtable.CustomPublicApi airtableCustomPublicApi = Airtable.buildInstance();
note that if you'll try to instantiate Airtable like that and not provide the required API key an exception will be thrown.
If you need to change the default Airtable API endpoint URL
you can set a system property or environment variable named AIRTABLE4J_BASE_URL
and set it to the required URL.
after getting reference to your database you'll have access to the following operations:
add()
replace()
delete()
update()
get()
getSingle()
The API is chainable, so you can query for data like:
// most basic form of querying, asking for everything and getting generic response
AirtableGetResponse result1 = airtablePublicApi.get().execute();
// you can pass class to the 'execute' method to get the result as a specific class
List<Person> result2 = airtablePublicApi.get().execute(Person.class);
// you might add additional constrains (only part of the possible constrains are presented in this example)
List<Person> result3 = airtablePublicApi.get()
.setMaxRecords(5)
.setFilterByFields("name", "age")
.setSortByFields(AirtableSortField.ascending("name"))
.execute(Person.class);
// if you want an iterator and not directly query for everything you might use the 'iterate' method
// NOTE: the iterator is lazy! so additional network requests will be made when the local data is depleted
AirtableGetIterator<Person> iterate = airtablePublicApi.get().iterate(Person.class);
// you might iterate regulary like so
for (Person person : iterate) {
System.out.println(person);
}
// or ask for everything from the iterator
List<Person> iterateAll = iterate.getAll();
note that you can pass any type of argument to generic functions (like add
):
// this will be valid
airtablePublicApi.add().addRecords(new Person(), "TEXT", 12);
or you can strong type the method and let the compiler type-check your code:
// this will NOT be valid and will lead to compiliation error.
// String and int are incompatible with the Person class
airtablePublicApi.<Person>add().addRecords(new Person(), "TEXT", 12);
you can use custom classes for specific Airtable constructs like Attachment
or Barcode
.
every available custom field class:
AirtableAttachment
AirtableBarcode
AirtableButton
AirtableCollaborator
if some Airtable table fields having different names to your
local java class fields you can use AirtableField
annotation to declare that:
public class Person {
@AirtableField("full_name") // <- the name in Airtable
private String fullName; // <- regular java class field
}
If you enjoy my work and find it useful, feel free to invite me to a cup of coffee :)
This project is licensed under the MIT License - see the LICENSE file for details.