The Palace Project's Android HTTP client.
Image by Free-Photos from Pixabay
The contents of this repository define an API specification and an implementation of an opinionated HTTP client for the various Palace Project Android projects. It is intended to implement various policy decisions (such as problem report parsing, higher timeout values, etc) in a centralized location so that these policies can be enacted across all codebases without duplicating code.
- Simple HTTP client interface modelled on okhttp
- Automatic RFC7807 problem report parsing
- Control over redirects
- Optional integration with Chucker
- Optional transparent handling of Library Simplified Bearer Tokens
- Optional synchronous file downloads with MIME type checking
- High-coverage automated test suite
- Easily mocked, strongly-typed Kotlin API
- API Semantic Versioning enforced with japicmp
- Apache 2.0 license
Make sure you clone this repository with git clone --recursive
.
If you forgot to use --recursive
, then execute:
$ git submodule init
$ git submodule update --remote --recursive
The short version: Install an Android SDK and run:
$ ./gradlew clean assembleDebug test
Please read the list of instructions below for specific details on configurations.
Install the Android SDK and Android Studio. We don't support the use of any other IDE at the moment.
Install a reasonably modern JDK: Java 17 is the current recommendation for Android Studio.
The JAVA_HOME
environment variable must be set correctly. You can check what it is set to in
most shells with echo $JAVA_HOME
. If that command does not show anything, adding the following
line to $HOME/.profile
and then executing source $HOME/.profile
or opening a new shell
should suffice:
# Replace NNN with your particular version of 17.
export JAVA_HOME=/path/to/jdk17_NNN
You can verify that everything is set up correctly by inspecting the results of both
java -version
and javac -version
:
$ java -version
openjdk version "17.0.8" 2023-07-18
OpenJDK Runtime Environment (build 17.0.8+7)
OpenJDK 64-Bit Server VM (build 17.0.8+7, mixed mode)
We use git flow as our
basis for branching and creating releases. We highly recommend installing
Git Flow AVH Edition to
automate some of the work of branching and tagging. Using gitflow-avh
is not required, but by automating the underlying repository operations,
it eliminates the possibility of making mistakes, and keeps the various
branches consistent.
The API complies with Semantic Versioning 2.0.0, and this is enforced using japicmp. The current version of the code is analyzed with respect to the previous version, and incompatible changes will require a major version increment. Please see the VERSIONING.txt file for the list of packages that are exempt from versioning rules due to being private implementation packages.
The project is heavily modularized in order to keep the separate components as loosely coupled as possible. New features should typically be implemented as new modules.
Module | Description |
---|---|
org.librarysimplified.http.api | Library Simplified HTTP client (API) |
org.librarysimplified.http.bearer_token | Library Simplified HTTP client (Bearer token extension) |
org.librarysimplified.http.chucker | Library Simplified HTTP client (Chucker extension) |
org.librarysimplified.http.downloads | Library Simplified HTTP client (File downloads) |
org.librarysimplified.http.tests | Library Simplified HTTP client (Test suite) |
org.librarysimplified.http.uri_builder | Library Simplified HTTP client (URI query builder) |
org.librarysimplified.http.vanilla | Library Simplified HTTP client (Vanilla implementation) |
Copyright 2020 The New York Public Library, Astor, Lenox, and Tilden Foundations
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed
under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. See the License for the
specific language governing permissions and limitations under the License.