nextcloud / deck

🗂 Kanban-style project & personal management tool for Nextcloud, similar to Trello
https://apps.nextcloud.com/apps/deck
GNU Affero General Public License v3.0
1.22k stars 278 forks source link

Provide public REST-API (and or documentation)... [$25 awarded] #83

Closed stefan-niedermann closed 6 years ago

stefan-niedermann commented 7 years ago

... so one can write native applications that are in sync with the web interface :)

--- The **[$25 bounty](https://www.bountysource.com/issues/43594118-provide-public-rest-api-and-or-documentation?utm_campaign=plugin&utm_content=tracker%2F52758431&utm_medium=issues&utm_source=github)** on this issue has been claimed at [Bountysource](https://www.bountysource.com/?utm_campaign=plugin&utm_content=tracker%2F52758431&utm_medium=issues&utm_source=github).
srbaker commented 7 years ago

Heya, is someone already working on this?

If not, I'll do it. This is my first work on Nextcloud stuff, though, so I'll benefit from some hand-holding.

Thanks!

juliusknorr commented 7 years ago

@srbaker Sorry for the delay. Sure, It would be awesome if you would jump in and help us improve deck.

It would require implementing some extra API controllers similar to what the news app does: https://github.com/nextcloud/news/blob/master/lib/Controller/FeedApiController.php

Although it would be great to have some concept before starting the implementation. You can have a look at the v2 API proposal of the news app here as well: https://github.com/nextcloud/news/blob/master/docs/externalapi/External-Api.md

If you have any further questions feel free to ask or ping me on irc.

srbaker commented 7 years ago

Perfect, thanks. I'll take a look at this on the weekend. I'm very excited to be able to replace Trello with something that I can share with my family. And I really want there to be a desktop and Android app as well. :)

stefan-niedermann commented 7 years ago

Android app

And that's what i am interested in to develop ;-)

juliusknorr commented 7 years ago

@srbaker I've invited you to be a repo contributer, so you can directly push branches when developing.

srbaker commented 7 years ago

Perfect, thanks! I didn't get as far as I wanted this weekend, but I have several hours in the evenings this week. I'll push up the in-progress stuff once I get the first simplest endpoint working.

Cheers!

moritz31 commented 7 years ago

@srbaker @juliushaertl If we have a REST-API it shouldn't be that complicated to add an iOs/Android application. Have done similar to some home automation stuff

juliusknorr commented 7 years ago

@srbaker Any news from your api implementation? Is there anything you need help with?

srbaker commented 7 years ago

Heya, sorry for the radio silence. Got a bit slowed down, but I have vacation time next week and I'm hoping to wrap up my work then.

juliusknorr commented 7 years ago

@srbaker No problem :wink: Take your time.

srbaker commented 7 years ago

Alright, it's actually moving. Lovely vacation project.

https://github.com/srbaker/deck/tree/add-json-api

I'd like help with the following:

  1. I'm really struggling by not doing this test-first, because that's my habit. I'm using curl manually as a temporary solution: When I run make test from my deck checkout, I get:
    
    mkdir -p build/
    phpunit -c tests/phpunit.xml --coverage-clover build/php-unit.coverage.xml
    PHPUnit 5.4.6 by Sebastian Bergmann and contributors.

Cannot open file "/home/srbaker/Projects/nextcloud/deck/tests/../../../tests/bootstrap.php".

Makefile:78: recipe for target 'test-unit' failed make: *** [test-unit] Error 1



2. I'd really like feedback on codestyle, patterns I'm missing, naming, or anything. This is my first contribution, and I want to do it well, so please comment and point me in the appropritate directions.

thanks!
juliusknorr commented 7 years ago

I'm really struggling by not doing this test-first, because that's my habit. I'm using curl manually as a temporary solution: When I run make test from my deck checkout, I get

The unit tests require the deck directory to be inside of the apps folder of a nextcloud installation. So you need to clone nextcloud/server and then put the deck app inside apps/ for the unit tests to run. Symlinking should also work fine, in case you want to keep the repo at its original position.

I'd really like feedback on codestyle, patterns I'm missing, naming, or anything. This is my first contribution, and I want to do it well, so please comment and point me in the appropritate directions.

From a quick look I had it already looks quite good, feel free to open a WIP pull request to the deck repo already, that makes it easier to keep track of changes and comment on code sections. Two very small things that came up when looking at it:

Good work so far. Thank you for getting this started.

srbaker commented 7 years ago

Thanks for your quick response. I'll spend some more time on this tonight and tomorrow evening, and get the basics in place. Cheers!

StillOnMyWay commented 7 years ago

Any update on this one?

sylvainar commented 7 years ago

I'm starting a React Native mobile application as a side-project / learning exercise plugged on fake data, looking forward to this ! 😄

srbaker commented 7 years ago

A bit slow moving over here, but I've got some time set aside for it shortly.

euZebe commented 6 years ago

@sylvainar any news about your React Native mobile app ? I would be glad to give a hand on that project if needed.

sunjam commented 6 years ago

Related issue for creating deck cards from a IFTTT-style web hook and overall discussion about implementing IFTTT web hooks + other open source alternatives to Nextcloud

putt1ck commented 6 years ago

Is there any movement on this (or any way we can help out)?

juliusknorr commented 6 years ago

@srbaker Maybe you can give us an update if you are still on implementing it. Otherwise maybe @putt1ck could pick up the work already done and continue with that. :wink:

srbaker commented 6 years ago

Heya, I do have some in-flight work, but I am in the middle of switching laptops. I realize I'm slow as fuck, but I can spend some time tomorrow evening on this, and a few other evenings this week.

juliusknorr commented 6 years ago

@srbaker Take your time. If you need any help, maybe you can just ping @putt1ck for that.

putt1ck commented 6 years ago

@srbaker let us know if there's anything we could do to help

putt1ck commented 6 years ago

Any news? We've got a client project in the pipeline that we'd love to build around NC but we'd need a way to write emails to Deck for it to fly.

NebriBlackwing commented 6 years ago

I'll happily take a look at this, a json api would definitely benefit the app :)

NebriBlackwing commented 6 years ago

@juliushaertl If you don't mind take a quick peak at commit: b2843c858c1ab9b2031a12a698f0b010397f79d5

I'm trying to spit back post data into a DataResponse just to verify my understanding, however when I test it, only the boardId is getting populated, everything else is getting returned as null. In fact if I send up an empty post body, boardId is still getting populated to 1! Seems like it's grabbing the url segments rather than the post.

Most MVC frameworks I've worked with, usually need some kind of denotation that the method in question is a POST, I haven't seen that in nextcloud apps yet. Below is a screenshot from rest client.

UPDATE: turns out the problem was in the rest client that I was trying to use. Switching out that rest client for another and now it's generating the request correctly. API is doing it's thing fine in that initial test :).

juliusknorr commented 6 years ago

I'm trying to spit back post data into a DataResponse just to verify my understanding, however when I test it, only the boardId is getting populated, everything else is getting returned as null. In fact if I send up an empty post body, boardId is still getting populated to 1! Seems like it's grabbing the url segments rather than the post.

You can access the values directly by using $this->request->post['boardId'] or $this->request->urlParams['boardId']

UPDATE: turns out the problem was in the rest client that I was trying to use. Switching out that rest client for another and now it's generating the request correctly. API is doing it's thing fine in that initial test :).

Ah ok, great to hear that.

NebriBlackwing commented 6 years ago

@nextcloud/deck just to be sure nothing gets missed, can I get a list of endpoints that we want to support for the api? We are very close now :+1:

schiessle commented 6 years ago

I know that there is already a pull request with a lot of code. I just found kanboard.org which already provides a API with existing Android clients (didn't checked other platforms) so I wonder if it would make sense to copy the API. This way we would be compatible with existing apps.

NebriBlackwing commented 6 years ago

The API code is finished, we're just getting through validation checks. Also REST provides a common interface that easily allows data exchange with other applications, so we're already compatible with existing applications.