c# webbrowser pdf : Excel print to pdf with bookmarks control SDK system web page wpf html console api-design-ebook-2012-032-part545

Web API Design - Crafting Interfaces that Developers Love 
21          
 
What about attribute names? 
In the previous section, we talked about formats - supporting multiple formats and working 
with JSON as the default. 
This time, let's talk about what happens when a response comes back. 
You have an object with data attributes on it. How should you name the attributes? 
Here are API responses from a few leading APIs: 
Twitter 
"created_at": "Thu Nov 03 05:19;38 +0000 2011" 
Bing 
"DateTime": "2011-10-29T09:35:00Z"
Foursquare 
"createdAt": 1320296464 
They each use a different code convention. Although the Twitter approach is familiar to me 
as a Ruby on Rails developer, we think that Foursquare has the best approach. 
How does the API response get back in the code? You parse the response (JSON parser); 
what comes back populates the Object. It looks like this 
var myObject = JSON.parse(response); 
If you chose the Twitter or Bing approach, your code looks like this. Its not JavaScript 
convention and looks weird - looks like the name of another object or class in the system, 
which is not correct. 
timing = myObject.created_at; 
timing - myObject.DateTime; 
Recommendations 
Use JSON as default 
Follow JavaScript conventions for naming attributes 
- Use medial capitalization (aka CamelCase) 
- Use uppercase or lowercase depending on type of object 
Excel print to pdf with bookmarks - add, remove, update PDF bookmarks in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Empower Your C# Project with Rapid PDF Internal Navigation Via Bookmark and Outline
bookmarks pdf reader; create pdf bookmark
Excel print to pdf with bookmarks - VB.NET PDF bookmark library: add, remove, update PDF bookmarks in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Empower Your VB.NET Project with Rapid PDF Internal Navigation Via Bookmark and Outline
how to add bookmarks to a pdf; how to add bookmarks to pdf document
Web API Design - Crafting Interfaces that Developers Love 
22          
 
This results in code that looks like the following, allowing the JavaScript developer to write 
it in a way that makes sense for JavaScript. 
"createdAt": 1320296464 
timing = myObject.createdAt; 
Tips for search  
While a simple search could be modeled as a resourceful API (for example, 
dogs/?q=red
), a more complex search across multiple resources requires a different 
design. 
This will sound familiar if you've read the topic about using verbs not nouns when results 
don't return a resource from the database - rather the result is some action or calculation.  
If you want to do a global search across resources, we suggest you follow the Google model: 
Global search 
/search?q=fluffy+fur 
Here, search is the verb; ?q represents the query. 
Scoped search 
To add scope to your search, you can prepend with the scope of the search. For example, 
search in dogs owned by resource ID 5678 
/owners/5678/dogs?q=fluffy+fur 
Notice that we’ve dropped the explicit search in the URL and rely on the parameter ‘q’ to 
indicate the scoped query. (Big thanks to the contributors on the API Craft Google group for 
helping refine this approach.) 
Formatted results 
For search or for any of the action oriented (non-resource) responses, you can prepend 
with the format as follows: 
/search.xml?q=fluffy+fur 
VB.NET PDF File Compress Library: Compress reduce PDF size in vb.
Document tags. Embedded print settings. Bookmarks. Comments, forms and multimedia. VB.NET Demo Code to Optimize An Exist PDF File in Visual C#.NET Project.
how to add bookmarks to pdf files; create bookmark pdf file
C# PDF File Split Library: Split, seperate PDF into multiple files
Split PDF file by top level bookmarks. The following C# codes explain how to split a PDF file into multiple ones by PDF bookmarks or outlines.
export bookmarks from pdf to excel; export pdf bookmarks to excel
Web API Design - Crafting Interfaces that Developers Love 
23          
 
Consolidate API requests in one subdomain 
We’ve talked about things that come after the top-level domain. This time, let's explore 
stuff on the other side of the URL.
Here's how Facebook, Foursquare, and Twitter handle this:
Facebook provides two APIs. They started with api.facebook.com, then modified it to orient 
around the social graph graph.facebook.com.  
graph.facebook.com 
api.facebook.com  
Foursquare has one API.  
api.foursquare.com  
Twitter has three APIs; two of them focused on search and streaming. 
stream.twitter.com 
api.twitter.com 
search.twitter.com 
It's easy to understand how Facebook and Twitter ended up with more than one API. It has 
a lot to do with timing and acquisition, and it's easy to reconfigure a CName entry in your 
DNS to point requests to different clusters. 
But if we're making design decisions about what's in the best interest of app developer, we 
recommend following Foursquare's lead: 
Consolidate all API requests under one API subdomain.  
It's cleaner, easier and more intuitive for developers who you want to build cool apps using 
your API. 
Facebook, Foursquare, and Twitter also all have dedicated developer portals. 
developers.facebook.com 
developers.foursquare.com 
dev.twitter.com 
How to organize all of this?  
Your API gateway should be the top-level domain. For example, 
api.teachdogrest.com
C# PDF File Compress Library: Compress reduce PDF size in C#.net
Document tags. Embedded print settings. Embedded search index. Bookmarks. Comments, forms and multimedia. Flatten visible layers. C#.NET DLLs: Compress PDF Document
add bookmarks pdf; create pdf bookmarks online
VB.NET PDF File Split Library: Split, seperate PDF into multiple
Demo Code in VB.NET. The following VB.NET codes explain how to split a PDF file into multiple ones by PDF bookmarks or outlines.
add bookmark pdf file; convert word pdf bookmarks
Web API Design - Crafting Interfaces that Developers Love 
24          
 
In keeping with the spirit of REST, your developer portal should follow this pattern: 
developers.yourtopleveldomain
. For example, 
developers.teachdogrest.com  
Do Web redirects 
Then optionally, if you can sense from requests coming in from the browser where the 
developer really needs to go, you can redirect. 
Say a developer types 
api.teachdogrest.com
in the browser but there's no other 
information for the GET request, you can probably safely redirect to your developer portal 
and help get the developer where they really need to be.  
api  developers (if from browser) 
dev  developers 
developer  developers 
C# Create PDF Library SDK to convert PDF from other file formats
create searchable PDF document from Microsoft Office Word, Excel and PowerPoint. Create and save editable PDF with a blank page, bookmarks, links, signatures
bookmarks in pdf from word; create pdf bookmarks from word
C# PDF Convert to HTML SDK: Convert PDF to html files in C#.net
by C#.NET PDF to HTML converter toolkit SDK, preserves all the original anchors, links, bookmarks and font style that are included in target PDF document file.
how to bookmark a pdf document; how to bookmark a pdf file
Web API Design - Crafting Interfaces that Developers Love 
25          
 
Tips for handling exceptional behavior  
So far, we've dealt with baseline, standard behaviors. 
Here we’ll explore some of the exceptions that can happen - when clients of Web APIs 
can't handle all the things we've discussed. For example, sometimes clients intercept HTTP 
error codes, or support limited HTTP methods. 
What are ways to handle these situations and work within the limitations of a specific 
client? 
When a client intercepts HTTP error codes 
One common thing in some versions of Adobe Flash - if you send an HTTP response that is 
anything other than HTTP 200 OK, the Flash container intercepts that response and puts 
the error code in front of the end user of the app. 
Therefore, the app developer doesn't have an opportunity to intercept the error code. App 
developers need the API to support this in some way. 
Twitter does an excellent job of handling this. 
They have an optional parameter 
suppress_response_codes
. If 
suppress_response_codes
is set to true, the HTTP response is always 200. 
/public_timelines.json? 
suppress_response_codes=true 
HTTP status code: 200 {"error":"Could not authenticate you."} 
Notice that this parameter is a big verbose response code. (They could have used 
something like 
src
, but they opted to be verbose.) 
This is important because when you look at the URL, you need to see that the response 
codes are being suppressed as it has huge implications about how apps are going to 
respond to it. 
Overall recommendations: 
1 - Use suppress_response_codes = true 
2 - The HTTP code is no longer just for the code 
The rules from our previous Handling Errors section change. In this context, the HTTP code 
is no longer just for the code - the program - it's now to be ignored. Client apps are never 
going to be checking the HTTP status code, as it is always the same. 
VB.NET PDF: Basic SDK Concept of XDoc.PDF
VB.NET programmers can convert Word, Excel, PowerPoint Tiff, Jpeg, Bmp, Png, and Gif to PDF document. This class describes bookmarks in a PDF document.
export pdf bookmarks to text; create pdf bookmarks
How to C#: Basic SDK Concept of XDoc.PDF for .NET
C# programmers can convert Word, Excel, PowerPoint Tiff, Jpeg, Bmp, Png, and Gif to PDF document. This class describes bookmarks in a PDF document.
bookmarks pdf documents; create pdf with bookmarks from word
Web API Design - Crafting Interfaces that Developers Love 
26          
 
3 - Push any response code that we would have put in the HTTP response down into the 
response message 
In my example below, the response code is 401. You can see it in the response message. 
Also include additional error codes and verbose information in that message. 
Always return OK 
/dogs?suppress_response_codes = true  
Code for ignoring 
200 - OK  
Message for people & code 
{response_code" : 401, "message" : "Verbose, plain language 
description of the problem with hints about how to fix it." 
"more_info" : "http://dev.tecachdogrest.com/errors/12345", 
"code" : 12345} 
When a client supports limited HTTP methods 
It is common to see support for GET and POST and not PUT and DELETE. 
To maintain the integrity of the four HTTP methods, we suggest you use the following 
methodology commonly used by Ruby on Rails developers: 
Make the method an optional parameter in the URL. 
Then the HTTP verb is always a GET but the developer can express rich HTTP verbs and 
still maintain a RESTful clean API. 
Create 
/dogs?method=post 
Read  
/dogs 
Update  
/dogs/1234?method=put&location=park 
Delete  
/dogs/1234?method=delete 
WARNING: It can be dangerous to provide post or delete capabilities using a GET method 
because if the URL is in a Web page then a Web crawler like the Googlebot can create or 
destroy lots of content inadvertently. Be sure you understand the implications of supporting 
this approach for your applications' context. 
Web API Design - Crafting Interfaces that Developers Love 
27          
 
Authentication  
There are many schools of thought. My colleagues at Apigee and I don't always agree on 
how to handle authentication - but overall here's my take. 
Let's look at these three top services. See how each of these services handles things 
differently: 
PayPal 
Permissions Service API 
Facebook 
OAuth 2.0 
Twitter 
OAuth 1.0a 
Note that PayPal's proprietary three-legged permissions API was in place long before 
OAuth was conceived. 
What should you do? 
Use the latest and greatest OAuth - OAuth 2.0 (as of this writing). It means that Web or 
mobile apps that expose APIs don’t have to share passwords. It allows the API provider to 
revoke tokens for an individual user, for an entire app, without requiring the user to 
change their original password. This is critical if a mobile device is compromised or if a 
rogue app is discovered.  
Above all, OAuth 2.0 will mean improved security and better end-user and consumer 
experiences with Web and mobile apps. 
Don't do something *like* OAuth, but different. It will be frustrating for app developers if 
they can't use an OAuth library in their language because of your variation.  
Web API Design - Crafting Interfaces that Developers Love 
28          
 
Making requests on your API 
Lets take a look at what some API requests and responses look like for our dogs API. 
Create a brown dog named Al 
POST /dogs 
name=Al&furColor=brown 
Response 
200 OK 
"dog":{ 
"id": "1234", 
"name": "Al", 
"furColor": "brown" 
 
Rename Al to Rover - Update 
PUT /dogs/1234 
name=Rover 
Response  
200 OK 
"dog":{ 
"id":"1234", 
"name": "Rover", 
"furColor": "brown" 
 
Web API Design - Crafting Interfaces that Developers Love 
29          
 
Tell me about a particular dog 
GET /dogs/1234 
Response  
200 OK 
"dog":{ 
"id":"1234", 
"name": "Rover", 
"furColor": "brown" 
Tell me about all the dogs 
GET /dogs 
Response  
200 OK 
"dogs": 
[{"dog":{ 
"id":"1233", 
"name": "Fido", 
"furColor": "white"}}, 
{"dog":{ 
"id":"1234", 
"name": "Rover", 
"furColor": "brown"}}] 
"_metadata": 
[{"totalCount":327,"limit":25,"offset":100}] 
Delete Rover :-( 
DELETE /dogs/1234 
Response 
200 OK 
Web API Design - Crafting Interfaces that Developers Love 
30          
 
Chatty APIs 
Let’s think about how app developers use that API you're designing and dealing with chatty 
APIs. 
Imagine how developers will use your API 
When designing your API and resources, try to imagine how developers will use it to say 
construct a user interface, an iPhone app, or many other apps. 
Some API designs become very chatty - meaning just to build a simple UI or app, you have 
dozens or hundreds of API calls back to the server. 
The API team can sometimes decide not to deal with creating a nice, resource-oriented 
RESTful API, and just fall back to a mode where they create the 3 or 4 Java-style getter and 
setter methods they know they need to power a particular user interface.  
We don't recommend this. You can design a RESTful API and still mitigate the chattiness. 
Be complete and RESTful and provide shortcuts 
First design your API and its resources according to pragmatic RESTful design principles 
and then provide shortcuts. 
What kind of shortcut? Say you know that 80% of all your apps are going to need some sort 
of composite response, then build the kind of request that gives them what they need. 
Just don't do the latter instead of the former. First design using good pragmatic RESTful 
principles! 
Take advantage of the partial response syntax 
The partial response syntax discussed in a previous section can help. 
To avoid creating one-off base URLs, you can use the partial response syntax to drill down 
to dependent and associated resources. 
In the case of our dogs API, the dogs have association with owners, who in turn have 
associations with veterinarians, and so on. Keep nesting the partial response syntax using 
dot notation to get back just the information you need. 
/owners/5678?fields=name,dogs.name 
Documents you may be interested
Documents you may be interested