Designin library for REST API client

Dear All,

I’m trying to build a ruby library to communicate with a REST API. I’m thinking to make it as an abstraction so it can be modular.

for example

the API is structure as RESTful web service which is Rails like

/devices -> list all device

/devices/12 -> show specific device

/documents

/documents/14

etc.

The problem that I’m facing it structuring the library with module and class. I wanted to make something like

client = MyLibrary.new user: ‘user’, password: ‘password’

array_of_devices = client.devices.all -> GET /device

devies = client.device.create -> POST /device

device = client.device.get(1) -> GET /device/1

document = client.document.new(device)

document.save

and maybe in the future

document.device -> will return the device where the document belongs to

etc.

first of all is storing the config (user and password) because all of the api needed this. My question is how to I structure it.

client.devices will return module or class ?

and how to share config variable with the other class or module within the library.

If you have like a resource, book or maybe a project that go into the detail of designin API library especially with REST that would help me a lot and appreciate it.

Thank you very much

Ahmy Yulrizka

Dear All,

I'm trying to build a ruby library to communicate with a REST API. I'm
thinking to make it as an abstraction so it can be modular.
for example

the API is structure as RESTful web service which is Rails like

/devices -> list all device
/devices/12 -> show specific device
/documents
/documents/14

etc.

The problem that I'm facing it structuring the library with module and
class. I wanted to make something like

client = MyLibrary.new user: 'user', password: 'password'

array_of_devices = client.devices.all -> GET /device
devies = client.device.create -> POST /device
device = client.device.get(1) -> GET /device/1

document = client.document.new(device)
document.save

and maybe in the future
document.device -> will return the device where the document belongs to

etc.

first of all is storing the config (user and password) because all of the
api needed this. My question is how to I structure it.

I am not sure I fully understand the problem as the answer seems
obvious, but if I do understand then the config would be stored as
attributes of the MyLibrary object, so would be available as
client.user or self.user, for example, when inside the class.

client.devices will return module or class ?
and how to share config variable with the other class or module within the
library.

Presumably client.device would be Device object, whatever that is,
though again I am not sure I understand the question fully.

Have you looked at ActiveResource? I have not used it myself but I
think it may already do what you are trying to achieve.

Colin

Sorry i think there is lack of consistency in my previous message.

it should be

client = MyLibrary.new user: ‘user’, password: ‘password’

array_of_devices = client.devices.all -> GET /device

devies = client.devices.create -> POST /device
device = client.devices.get(1) -> GET /device/1

i understand that user and password would be attribute on client object.

but for example,

client.devices -> would this return a new class or its just a MyClient::Device module that have included in the client.

client.devices.all -> where is the function ‘all’ implemented ?

device = client.devices.find(1) -> this will return a new object of class Device right.

then when i do device.save()

‘save’ method on object device will have to send a request (POST or PUT). then the class should know the user and password which is stored in the client object. should I pass the user and password variable to the device object or there is a better way ?

Thank you Collin, I will look at the ActiveResource implementation

Kind Regards,
Ahmy Yulrizka

Dear
Ahmy Yulrizka,

I think what you are searching for is a REST Client API for Ruby that have integration with ActiveResource.

Hope this help you :slight_smile: