Movatterモバイル変換


[0]ホーム

URL:


Skip to content
DEV Community
Log in Create account

DEV Community

Cover image for Improvements of Jira REST API Client
alexdodonov
alexdodonov

Posted on • Edited on

     

Improvements of Jira REST API Client

Hi all!

In theprevious article I have shown how PHP client classes for varios REST APIs may be created.

Now I'am going to show how to submit data for creating entities.

First of all we need to improve request submitting method:

if(self::isHeaderExists($headers,'Content-type: application/json')){// converting data in JSON$formData=json_encode($data);}else{$formData=[];foreach($dataas$key=>$value){$formData[]=$key.'='.urlencode($value);}$formData=implode('&',$formData);}$curlConfig[CURLOPT_POSTFIELDS]=$formData;
Enter fullscreen modeExit fullscreen mode

Then remove default headers wich were added automatically:

protectedfunctiongetCommonHeaders():array{$result=$this->headers;if($this->idempotencyKey!==''){$result[]='Idempotency-Key: '.$this->idempotencyKey;}// this default header must be removed because// Jira API returns error and Atlassian is not going// to fix it$result[]='User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0';return$result;}
Enter fullscreen modeExit fullscreen mode

New let's update our classes for calling API methods. First of all I have refactored methods for operations with connection:

traitConnectionMethods{/**     * Connection to Jira     *     * @var Connection     */private$connection=null;/**     * Method returns connection to Jira     *     * @return Connection connection to Jira     */protectedfunctiongetConnection():Connection{return$this->connection;}/**     * Method returns connection to Jira     *     * @param Connection $connection     *            connection to Jira     */protectedfunctionsetConnection(Connection$connection):void{$this->connection=$connection;}}
Enter fullscreen modeExit fullscreen mode

And now we create class for creating Jira issue:

classIssue{useConnectionMethods;/**     * Issue data     *     * @var object     */private$issue=null;/**     * Constructor     *     * @param Connection $connection     *            connection to Jira     * @param object $issue     *            data     */publicfunction__construct(Connection$connection){$this->setConnection($connection);$this->issue=new\stdClass();}/**     * Setting id     *     * @param int $id     */publicfunctionsetId(int$id):void{$this->issue->id=$id;}/**     * Getting id     *     * @return int     */publicfunctiongetId():int{if(!isset($this->issue->id)){throw(new\Exception('Field "id"  was not found for the issue'));}return$this->issue->id;}/**     * Setting summary     *     * @param string $summary     *            summary     */publicfunctionsetSummary(string$summary):void{$this->issue->summary=$summary;}/**     * Getting summary     *     * @return string summary     */publicfunctiongetSummary():string{if(!isset($this->issue->summary)){throw(new\Exception('Field "summary"  was not found for the issue'));}return$this->issue->summary;}/**     * Setting description     *     * @param string $description     *            description     */publicfunctionsetDescription(string$description):void{// since Jira REST API v3 setting description data// have become quite tricky )if(!isset($this->issue->description)){$this->issue->description=new\stdClass();$this->issue->description->type='doc';$this->issue->description->version=1;}$content=new\stdClass();$content->text=$description;$content->type='text';$paragraph=new\stdClass();$paragraph->type='paragraph';$paragraph->content=[];$paragraph->content[]=$content;$this->issue->description->content=[];$this->issue->description->content[]=$paragraph;}/**     * Getting description     *     * @return object description     */publicfunctiongetDescription():object{if(!isset($this->issue->description)){throw(new\Exception('Field "description"  was not found for the issue'));}return$this->issue->description;}/**     * Setting project key     *     * @param string $projectKey     *            project key     */publicfunctionsetProjectKey(string$projectKey):void{if(!isset($this->issue->project)){$this->issue->project=new\stdClass();}$this->issue->project->key=$projectKey;}/**     * Getting project key     *     * @return string project key     */publicfunctiongetProjectKey():string{if(!isset($this->issue->project)||!isset($this->issue->project->key)){throw(new\Exception('Field "project->key" was not found for the issue'));}return$this->issue->project->key;}/**     * Getting project     *     * @return object project     */publicfunctiongetProject():object{if(!isset($this->issue->project)){throw(new\Exception('Field "project" was not found for the issue'));}return$this->issue->project;}/**     * Setting issue type name     *     * @param string $issueTypeName     *            issue type name     */publicfunctionsetIssueTypeName(string$issueTypeName):void{if(!isset($this->issue->issueType)){$this->issue->issueType=new\stdClass();}$this->issue->issueType->name=$issueTypeName;}/**     * Getting issue type name     *     * @return string issue type name     */publicfunctiongetIssueTypeName():string{if(!isset($this->issue->issueType)||!isset($this->issue->issueType->name)){throw(new\Exception('Field "issueType->name" was not found for the issue'));}return$this->issue->issueType->name;}/**     * Getting issue type     *     * @return object issue type     */publicfunctiongetIssueType():object{if(!isset($this->issue->issueType)){throw(new\Exception('Field "issueType" was not found for the issue'));}return$this->issue->issueType;}/**     * Method creates issue     */publicfunctioncreate():void{$this->getConnection()->sendPostRequest('/issue',['fields'=>['project'=>$this->getProject(),'summary'=>$this->getSummary(),'description'=>$this->getDescription(),'issuetype'=>$this->getIssueType()]]);}
Enter fullscreen modeExit fullscreen mode

And now we are ready to create issue:

// connecting to your JIRA instance$jira=newConnection('jira-url','jira-login','jira-access-token');// setting issue data$issue=newIssue($jira);$issue->setSummary('summary');$issue->setDescription('description');$issue->setProjectKey('AP');// or any other project key of yours$issue->setIssueTypeName('Task');// or Bug// creating issue$issue->create();
Enter fullscreen modeExit fullscreen mode

And that's all! )

Links

It will be great if you will contribute something to this project. Documentation, sharing the project in your social media, bug fixing, refactoring, or evensubmitting issue with question or feature request. Thanks anyway )

Top comments(0)

Subscribe
pic
Create template

Templates let you quickly answer FAQs or store snippets for re-use.

Dismiss

Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment'spermalink.

For further actions, you may consider blocking this person and/orreporting abuse

PHP developer
  • Location
    Russia
  • Work
    Alex at Freelance
  • Joined

More fromalexdodonov

DEV Community

We're a place where coders share, stay up-to-date and grow their careers.

Log in Create account

[8]ページ先頭

©2009-2025 Movatter.jp